github.com/sleungcy/cli@v7.1.0+incompatible/api/uaa/refresh_token_test.go (about) 1 package uaa_test 2 3 import ( 4 "fmt" 5 "net/http" 6 7 . "code.cloudfoundry.org/cli/api/uaa" 8 "code.cloudfoundry.org/cli/api/uaa/constant" 9 "code.cloudfoundry.org/cli/api/uaa/uaafakes" 10 11 . "github.com/onsi/ginkgo" 12 . "github.com/onsi/gomega" 13 . "github.com/onsi/gomega/ghttp" 14 ) 15 16 var _ = Describe("UAA Client", func() { 17 var ( 18 client *Client 19 20 fakeConfig *uaafakes.FakeConfig 21 ) 22 23 BeforeEach(func() { 24 fakeConfig = NewTestConfig() 25 26 client = NewTestUAAClientAndStore(fakeConfig) 27 }) 28 29 Describe("RefreshAccessToken", func() { 30 var ( 31 returnedAccessToken string 32 sentRefreshToken string 33 returnedRefreshToken string 34 ) 35 36 When("the provided grant_type is client_credentials", func() { 37 BeforeEach(func() { 38 fakeConfig.UAAGrantTypeReturns(string(constant.GrantTypeClientCredentials)) 39 40 returnedAccessToken = "I-ACCESS-TOKEN" 41 response := fmt.Sprintf(`{ 42 "access_token": "%s", 43 "token_type": "bearer", 44 "expires_in": 599, 45 "scope": "cloud_controller.read password.write cloud_controller.write openid uaa.user", 46 "jti": "4150c08afa2848278e5ad57201024e32" 47 }`, returnedAccessToken) 48 49 server.AppendHandlers( 50 CombineHandlers( 51 verifyRequestHost(TestAuthorizationResource), 52 VerifyRequest(http.MethodPost, "/oauth/token"), 53 VerifyHeaderKV("Accept", "application/json"), 54 VerifyHeaderKV("Content-Type", "application/x-www-form-urlencoded"), 55 VerifyHeaderKV("Authorization"), 56 VerifyBody([]byte(fmt.Sprintf("client_id=client-id&client_secret=client-secret&grant_type=%s", constant.GrantTypeClientCredentials))), 57 RespondWith(http.StatusOK, response), 58 )) 59 }) 60 61 It("refreshes the tokens", func() { 62 token, err := client.RefreshAccessToken(sentRefreshToken) 63 Expect(err).ToNot(HaveOccurred()) 64 Expect(token).To(Equal(RefreshedTokens{ 65 AccessToken: returnedAccessToken, 66 Type: "bearer", 67 })) 68 69 Expect(server.ReceivedRequests()).To(HaveLen(2)) 70 }) 71 }) 72 73 When("the provided grant_type is password", func() { 74 BeforeEach(func() { 75 fakeConfig.UAAGrantTypeReturns(string(constant.GrantTypePassword)) 76 77 returnedAccessToken = "I-ACCESS-TOKEN" 78 sentRefreshToken = "I-R-REFRESH-TOKEN" 79 returnedRefreshToken = "I-R-NEW-REFRESH-TOKEN" 80 response := fmt.Sprintf(`{ 81 "access_token": "%s", 82 "token_type": "bearer", 83 "refresh_token": "%s", 84 "expires_in": 599, 85 "scope": "cloud_controller.read password.write cloud_controller.write openid uaa.user", 86 "jti": "4150c08afa2848278e5ad57201024e32" 87 }`, returnedAccessToken, returnedRefreshToken) 88 89 server.AppendHandlers( 90 CombineHandlers( 91 verifyRequestHost(TestAuthorizationResource), 92 VerifyRequest(http.MethodPost, "/oauth/token"), 93 VerifyHeaderKV("Accept", "application/json"), 94 VerifyHeaderKV("Content-Type", "application/x-www-form-urlencoded"), 95 VerifyHeaderKV("Authorization", "Basic Y2xpZW50LWlkOmNsaWVudC1zZWNyZXQ="), 96 VerifyBody([]byte(fmt.Sprintf("grant_type=%s&refresh_token=%s", constant.GrantTypeRefreshToken, sentRefreshToken))), 97 RespondWith(http.StatusOK, response), 98 )) 99 }) 100 101 It("refreshes the tokens", func() { 102 token, err := client.RefreshAccessToken(sentRefreshToken) 103 Expect(err).ToNot(HaveOccurred()) 104 Expect(token).To(Equal(RefreshedTokens{ 105 AccessToken: returnedAccessToken, 106 RefreshToken: returnedRefreshToken, 107 Type: "bearer", 108 })) 109 110 Expect(server.ReceivedRequests()).To(HaveLen(2)) 111 }) 112 }) 113 114 When("the provided grant_type is empty", func() { 115 BeforeEach(func() { 116 fakeConfig.UAAGrantTypeReturns("") 117 118 returnedAccessToken = "I-ACCESS-TOKEN" 119 sentRefreshToken = "I-R-REFRESH-TOKEN" 120 returnedRefreshToken = "I-R-NEW-REFRESH-TOKEN" 121 response := fmt.Sprintf(`{ 122 "access_token": "%s", 123 "token_type": "bearer", 124 "refresh_token": "%s", 125 "expires_in": 599, 126 "scope": "cloud_controller.read password.write cloud_controller.write openid uaa.user", 127 "jti": "4150c08afa2848278e5ad57201024e32" 128 }`, returnedAccessToken, returnedRefreshToken) 129 130 server.AppendHandlers( 131 CombineHandlers( 132 verifyRequestHost(TestAuthorizationResource), 133 VerifyRequest(http.MethodPost, "/oauth/token"), 134 VerifyHeaderKV("Accept", "application/json"), 135 VerifyHeaderKV("Content-Type", "application/x-www-form-urlencoded"), 136 VerifyHeaderKV("Authorization", "Basic Y2xpZW50LWlkOmNsaWVudC1zZWNyZXQ="), 137 VerifyBody([]byte(fmt.Sprintf("grant_type=%s&refresh_token=%s", constant.GrantTypeRefreshToken, sentRefreshToken))), 138 RespondWith(http.StatusOK, response), 139 )) 140 }) 141 142 It("refreshes the tokens", func() { 143 token, err := client.RefreshAccessToken(sentRefreshToken) 144 Expect(err).ToNot(HaveOccurred()) 145 Expect(token).To(Equal(RefreshedTokens{ 146 AccessToken: returnedAccessToken, 147 RefreshToken: returnedRefreshToken, 148 Type: "bearer", 149 })) 150 151 Expect(server.ReceivedRequests()).To(HaveLen(2)) 152 }) 153 }) 154 }) 155 })