Add test cases for JWT verification feature.
diff --git a/oauth.go b/oauth.go index 986fd40..b2dd31b 100644 --- a/oauth.go +++ b/oauth.go
@@ -60,12 +60,12 @@ func (s *HTTPScaffold) CreateOAuth(keyURL string) OAuthService { pk, err := getPublicKey(keyURL) - if err != nil { + if err == nil { setPkSafe(pk) } /* - Routine that will fetch & update the public keys in safe manner - */ + * Routine that will fetch & update the public keys in safe manner + */ updatePublicKeysPeriodic(keyURL) return &OAuth{}
diff --git a/scaffold_test.go b/scaffold_test.go index d3e3e98..e380a3e 100644 --- a/scaffold_test.go +++ b/scaffold_test.go
@@ -6,9 +6,11 @@ "encoding/json" "errors" "fmt" + "github.com/julienschmidt/httprouter" "io/ioutil" "net" "net/http" + "os" "strings" "sync/atomic" "time" @@ -17,6 +19,12 @@ . "github.com/onsi/gomega" ) +var ( + dbURL string + ssoURL string + bToken string +) + var insecureClient = &http.Client{ Transport: &http.Transport{ TLSClientConfig: &tls.Config{ @@ -24,6 +32,21 @@ }, }, } +var _ = BeforeSuite(func() { + ssoURL = os.Getenv("TEST_SSO_URL") + bToken = os.Getenv("BEARER_JWT_TOKEN") + if ssoURL == "" || bToken == "" { + fmt.Println("Tests aborted: TEST_SSO_URL/BEARER_JWT_TOKEN not set\n") + fmt.Println("Example:") + fmt.Println("TEST_SSO_URL=https://login.e2e.apigee.net/token_key") + fmt.Println("BEARER_JWT_TOKEN=eyJhbGciOiJSUzI1NiJ9.eyJqdGkiOiIwMDgwNWNlYi0yNzI5LTQ2OTgtYWNiMy1jNTRkZmIzMWM4MjEiLCJzdWIiO\n") + fmt.Println("NOTE:-") + fmt.Println("BEARER_JWT_TOKEN can be gotten by `get_token -u sramamoorthy+edgetest@apigee.com:Test12345`") + fmt.Println("get_token download details are at https://apigeesc.atlassian.net/wiki/display/EH/get_token\n") + Fail("Please set Environment variables as expected") + } + +}) var _ = Describe("Scaffold Tests", func() { It("Validate framework", func() { @@ -366,13 +389,70 @@ }) + It("SSO handler validation", func() { + router := httprouter.New() + Expect(router).ShouldNot(BeNil()) + scaf := CreateHTTPScaffold() + Expect(scaf).ShouldNot(BeNil()) + err := scaf.Open() + Expect(err).Should(Succeed()) + oauth := scaf.CreateOAuth(ssoURL) + Expect(oauth).ShouldNot(BeNil()) + go func() { + fmt.Fprintf(GinkgoWriter, "Gonna listen on %s\n", scaf.InsecureAddress()) + router.GET(oauth.SSOHandler("/foobar/:param1/:param2", buslogicHandler)) + scaf.Listen(router) + }() + Eventually(func() bool { + req, err := http.NewRequest("GET", + "http://"+scaf.InsecureAddress()+"/foobar/xyz/123", nil) + if err != nil { + return false + } + req.Header.Set("Authorization", "Bearer "+bToken) + client := &http.Client{} + resp, err := client.Do(req) + Expect(err).Should(Succeed()) + defer resp.Body.Close() + Expect(resp.StatusCode).To(Equal(http.StatusOK)) + + return true + }, 1*time.Second).Should(BeTrue()) + + Eventually(func() bool { + req, err := http.NewRequest("GET", + "http://"+scaf.InsecureAddress()+"/foobar/xyz/123", nil) + if err != nil { + return false + } + req.Header.Set("Authorization", "Bearer DEADBEEF") + client := &http.Client{} + resp, err := client.Do(req) + Expect(err).Should(Succeed()) + defer resp.Body.Close() + Expect(resp.StatusCode).To(Equal(http.StatusBadRequest)) + + return true + }, 1*time.Second).Should(BeTrue()) + + }) + It("Get stack trace", func() { b := &bytes.Buffer{} dumpStack(b) Expect(b.Len()).ShouldNot(BeZero()) }) + }) +func buslogicHandler(w http.ResponseWriter, r *http.Request) { + p := FetchParams(r) + cid := p.ByName("param1") + Expect(cid).To(Equal("xyz")) + cid = p.ByName("param2") + Expect(cid).To(Equal("123")) +} + func getText(url string) (int, string) { req, err := http.NewRequest("GET", url, nil) Expect(err).Should(Succeed())