package swservice

import (
	"testing"
)

const caPEM = `-----BEGIN CERTIFICATE-----
MIID8TCCAtmgAwIBAgIJAKFBiWb1ivtAMA0GCSqGSIb3DQEBCwUAMIGOMQswCQYD
VQQGEwJDTjELMAkGA1UECAwCU0gxETAPBgNVBAcMCFNoYW5naGFpMRIwEAYDVQQK
DAlTdXB3aXNkb20xDDAKBgNVBAsMA1lrdDEaMBgGA1UEAwwReWt0LnN1cHdpc2Rv
bS5jb20xITAfBgkqhkiG9w0BCQEWEnRlY2hAc3Vwd2lzZG9tLmNvbTAeFw0xNjA3
MTQwMjU4MTBaFw0xNjA4MTMwMjU4MTBaMIGOMQswCQYDVQQGEwJDTjELMAkGA1UE
CAwCU0gxETAPBgNVBAcMCFNoYW5naGFpMRIwEAYDVQQKDAlTdXB3aXNkb20xDDAK
BgNVBAsMA1lrdDEaMBgGA1UEAwwReWt0LnN1cHdpc2RvbS5jb20xITAfBgkqhkiG
9w0BCQEWEnRlY2hAc3Vwd2lzZG9tLmNvbTCCASIwDQYJKoZIhvcNAQEBBQADggEP
ADCCAQoCggEBANaI/Go+ysBu1pQytxyFKehHic+WCfWeFltnKJg6QczYczqqZR8K
xpRfEOWy3srRr5K+IRASuYka5DIHyZkozisdcLH8pzBd/gKluh0PlMClOJ8nYbe/
6LHuASPzaehLxenjg8G39A0qX3cJCo0Wo95fkzViroyMKX4wu91GYlOlMv/5PlbZ
dtL5G2yJPuvyyG8cp7OUQjVFdfI1S3rLnwn3DDCnhsw48j8GFTbdPWbnIqG2sgW0
K6ycTioTmvxEWjMEl+f1aodQ13FbtG84xcLOz0kcvAHzcLATKHXhs3f9jZMo62Y1
jDjq9kmPkznv35r/Wvh94dsBPjroH15sLXUCAwEAAaNQME4wHQYDVR0OBBYEFOXs
u68Yd29qPaSADyL9cq8T7aYOMB8GA1UdIwQYMBaAFOXsu68Yd29qPaSADyL9cq8T
7aYOMAwGA1UdEwQFMAMBAf8wDQYJKoZIhvcNAQELBQADggEBADkZxo5/r82rmwKz
A5Jba2YLWiBtjalHfpi2US8IQKva47Jb/P/TmbukdNCeaNjS8FRypaA4HM81G+tE
mDIIL5U8KnZ3DeZA/Ql4GtWscLxs92NdNo4dNqMZyLtphEQVY4mkynygqW4koCwN
fo6rwgTWN+kZ2Eo5i8ZPsCi2mew7vy8IK+B06toVw0picCgvhCXtVjHS4ndj52FZ
9nNHnIoaJLxPj+UhICKH73WVJdZQEPpfB7upkBARNJ7y313wm6wh8FIA86frqKiV
mggFtcm1X5BXnYYe9p+3+e5qQK2hkiZuRKzjAaIwzww5oI5QMHLkyDa1Mhn87w2v
9HSYpIA=
-----END CERTIFICATE-----

`
const (
	appID     = "100001"
	appSecret = "3072a87ece234b728b519ded8dd152b1"
	termID    = "1020303"
)

func TestUseHTTP(t *testing.T) {
	uri := "http://vb-docker:8443/epayapi/services"
	session := NewSession(appID, appSecret, termID, uri, 3, true)
	err := session.Auth()
	if err != nil {
		t.Errorf("Auth Error: %v", err)
	}
}

func TestUseHTTPS(t *testing.T) {
	uri := "https://vb-docker:8443/epayapi/services"
	session, err := NewSessionWithCA(appID, appSecret, termID, uri, 3, []byte(caPEM))
	if err != nil {
		t.Error("New Session , ", err)
		return
	}
	err = session.Auth()
	if err != nil {
		t.Errorf("Auth Error: %v", err)
		return
	}
}

func TestUseSecureHTTPS(t *testing.T) {
	uri := "https://www.baidu.com"
	session := NewSession(appID, appSecret, termID, uri, 3, true)
	err := session.Auth()
	if err != nil {
		t.Errorf("Auth Error: %v", err)
		return
	}
}
