|
|
@@ -125,7 +125,7 @@ func (suite *LoginSuite) TestInvalidLogin() {
|
|
|
azureLogin, err := newAzureLoginServiceFromPath(filepath.Join(suite.dir, tokenStoreFilename), suite.mockHelper)
|
|
|
Expect(err).To(BeNil())
|
|
|
|
|
|
- err = azureLogin.Login(context.TODO())
|
|
|
+ err = azureLogin.Login(context.TODO(), "")
|
|
|
Expect(err.Error()).To(BeEquivalentTo("no login code: login failed"))
|
|
|
}
|
|
|
|
|
|
@@ -166,7 +166,57 @@ func (suite *LoginSuite) TestValidLogin() {
|
|
|
azureLogin, err := newAzureLoginServiceFromPath(filepath.Join(suite.dir, tokenStoreFilename), suite.mockHelper)
|
|
|
Expect(err).To(BeNil())
|
|
|
|
|
|
- err = azureLogin.Login(context.TODO())
|
|
|
+ err = azureLogin.Login(context.TODO(), "")
|
|
|
+ Expect(err).To(BeNil())
|
|
|
+
|
|
|
+ loginToken, err := suite.azureLogin.tokenStore.readToken()
|
|
|
+ Expect(err).To(BeNil())
|
|
|
+ Expect(loginToken.Token.AccessToken).To(Equal("newAccessToken"))
|
|
|
+ Expect(loginToken.Token.RefreshToken).To(Equal("newRefreshToken"))
|
|
|
+ Expect(loginToken.Token.Expiry).To(BeTemporally(">", time.Now().Add(3500*time.Second)))
|
|
|
+ Expect(loginToken.TenantID).To(Equal("12345a7c-c56d-43e8-9549-dd230ce8a038"))
|
|
|
+ Expect(loginToken.Token.Type()).To(Equal("Bearer"))
|
|
|
+}
|
|
|
+
|
|
|
+func (suite *LoginSuite) TestValidLoginRequestedTenant() {
|
|
|
+ var redirectURL string
|
|
|
+ suite.mockHelper.On("openAzureLoginPage", mock.AnythingOfType("string")).Run(func(args mock.Arguments) {
|
|
|
+ redirectURL = args.Get(0).(string)
|
|
|
+ err := queryKeyValue(redirectURL, "code", "123456879")
|
|
|
+ Expect(err).To(BeNil())
|
|
|
+ })
|
|
|
+
|
|
|
+ suite.mockHelper.On("queryToken", mock.MatchedBy(func(data url.Values) bool {
|
|
|
+ //Need a matcher here because the value of redirectUrl is not known until executing openAzureLoginPage
|
|
|
+ return reflect.DeepEqual(data, url.Values{
|
|
|
+ "grant_type": []string{"authorization_code"},
|
|
|
+ "client_id": []string{clientID},
|
|
|
+ "code": []string{"123456879"},
|
|
|
+ "scope": []string{scopes},
|
|
|
+ "redirect_uri": []string{redirectURL},
|
|
|
+ })
|
|
|
+ }), "organizations").Return(azureToken{
|
|
|
+ RefreshToken: "firstRefreshToken",
|
|
|
+ AccessToken: "firstAccessToken",
|
|
|
+ ExpiresIn: 3600,
|
|
|
+ Foci: "1",
|
|
|
+ }, nil)
|
|
|
+
|
|
|
+ authBody := `{"value":[{"id":"/tenants/00000000-c56d-43e8-9549-dd230ce8a038","tenantId":"00000000-c56d-43e8-9549-dd230ce8a038"},
|
|
|
+ {"id":"/tenants/12345a7c-c56d-43e8-9549-dd230ce8a038","tenantId":"12345a7c-c56d-43e8-9549-dd230ce8a038"}]}`
|
|
|
+
|
|
|
+ suite.mockHelper.On("queryAuthorizationAPI", authorizationURL, "Bearer firstAccessToken").Return([]byte(authBody), 200, nil)
|
|
|
+ data := refreshTokenData("firstRefreshToken")
|
|
|
+ suite.mockHelper.On("queryToken", data, "12345a7c-c56d-43e8-9549-dd230ce8a038").Return(azureToken{
|
|
|
+ RefreshToken: "newRefreshToken",
|
|
|
+ AccessToken: "newAccessToken",
|
|
|
+ ExpiresIn: 3600,
|
|
|
+ Foci: "1",
|
|
|
+ }, nil)
|
|
|
+ azureLogin, err := newAzureLoginServiceFromPath(filepath.Join(suite.dir, tokenStoreFilename), suite.mockHelper)
|
|
|
+ Expect(err).To(BeNil())
|
|
|
+
|
|
|
+ err = azureLogin.Login(context.TODO(), "12345a7c-c56d-43e8-9549-dd230ce8a038")
|
|
|
Expect(err).To(BeNil())
|
|
|
|
|
|
loginToken, err := suite.azureLogin.tokenStore.readToken()
|
|
|
@@ -202,13 +252,47 @@ func (suite *LoginSuite) TestLoginNoTenant() {
|
|
|
Foci: "1",
|
|
|
}, nil)
|
|
|
|
|
|
+ authBody := `{"value":[{"id":"/tenants/12345a7c-c56d-43e8-9549-dd230ce8a038","tenantId":"12345a7c-c56d-43e8-9549-dd230ce8a038"}]}`
|
|
|
+ suite.mockHelper.On("queryAuthorizationAPI", authorizationURL, "Bearer firstAccessToken").Return([]byte(authBody), 200, nil)
|
|
|
+
|
|
|
+ azureLogin, err := newAzureLoginServiceFromPath(filepath.Join(suite.dir, tokenStoreFilename), suite.mockHelper)
|
|
|
+ Expect(err).To(BeNil())
|
|
|
+
|
|
|
+ err = azureLogin.Login(context.TODO(), "00000000-c56d-43e8-9549-dd230ce8a038")
|
|
|
+ Expect(err.Error()).To(BeEquivalentTo("could not find requested azure tenant 00000000-c56d-43e8-9549-dd230ce8a038: login failed"))
|
|
|
+}
|
|
|
+
|
|
|
+func (suite *LoginSuite) TestLoginRequestedTenantNotFound() {
|
|
|
+ var redirectURL string
|
|
|
+ suite.mockHelper.On("openAzureLoginPage", mock.AnythingOfType("string")).Run(func(args mock.Arguments) {
|
|
|
+ redirectURL = args.Get(0).(string)
|
|
|
+ err := queryKeyValue(redirectURL, "code", "123456879")
|
|
|
+ Expect(err).To(BeNil())
|
|
|
+ })
|
|
|
+
|
|
|
+ suite.mockHelper.On("queryToken", mock.MatchedBy(func(data url.Values) bool {
|
|
|
+ //Need a matcher here because the value of redirectUrl is not known until executing openAzureLoginPage
|
|
|
+ return reflect.DeepEqual(data, url.Values{
|
|
|
+ "grant_type": []string{"authorization_code"},
|
|
|
+ "client_id": []string{clientID},
|
|
|
+ "code": []string{"123456879"},
|
|
|
+ "scope": []string{scopes},
|
|
|
+ "redirect_uri": []string{redirectURL},
|
|
|
+ })
|
|
|
+ }), "organizations").Return(azureToken{
|
|
|
+ RefreshToken: "firstRefreshToken",
|
|
|
+ AccessToken: "firstAccessToken",
|
|
|
+ ExpiresIn: 3600,
|
|
|
+ Foci: "1",
|
|
|
+ }, nil)
|
|
|
+
|
|
|
authBody := `{"value":[]}`
|
|
|
suite.mockHelper.On("queryAuthorizationAPI", authorizationURL, "Bearer firstAccessToken").Return([]byte(authBody), 200, nil)
|
|
|
|
|
|
azureLogin, err := newAzureLoginServiceFromPath(filepath.Join(suite.dir, tokenStoreFilename), suite.mockHelper)
|
|
|
Expect(err).To(BeNil())
|
|
|
|
|
|
- err = azureLogin.Login(context.TODO())
|
|
|
+ err = azureLogin.Login(context.TODO(), "")
|
|
|
Expect(err.Error()).To(BeEquivalentTo("could not find azure tenant: login failed"))
|
|
|
}
|
|
|
|
|
|
@@ -243,7 +327,7 @@ func (suite *LoginSuite) TestLoginAuthorizationFailed() {
|
|
|
azureLogin, err := newAzureLoginServiceFromPath(filepath.Join(suite.dir, tokenStoreFilename), suite.mockHelper)
|
|
|
Expect(err).To(BeNil())
|
|
|
|
|
|
- err = azureLogin.Login(context.TODO())
|
|
|
+ err = azureLogin.Login(context.TODO(), "")
|
|
|
Expect(err.Error()).To(BeEquivalentTo("unable to login status code 400: [access denied]: login failed"))
|
|
|
}
|
|
|
|