github.com/jenkins-x/jx/v2@v2.1.155/pkg/auth/auth_config_test.go (about) 1 // +build unit 2 3 package auth_test 4 5 import ( 6 "testing" 7 8 "github.com/jenkins-x/jx/v2/pkg/auth" 9 "github.com/stretchr/testify/assert" 10 "github.com/stretchr/testify/require" 11 ) 12 13 const ( 14 url1 = "http://dummy/" 15 url2 = "http://another-jenkins/" 16 17 userDoesNotExist = "doesNotExist" 18 user1 = "someone" 19 user2 = "another" 20 token2v2 = "tokenV2" 21 ) 22 23 func TestAuthConfig(t *testing.T) { 24 t.Parallel() 25 configTest := ConfigTest{ 26 t: t, 27 } 28 configTest.svc = auth.NewMemoryAuthConfigService() 29 30 config := configTest.Load() 31 32 assert.Equal(t, 0, len(config.Servers), "Should have no servers in config but got %v", config) 33 assertNoAuth(t, config, url1, userDoesNotExist) 34 35 auth1 := auth.UserAuth{ 36 Username: user1, 37 ApiToken: "someToken", 38 } 39 config = configTest.SetUserAuth(url1, auth1) 40 41 assert.Equal(t, 1, len(config.Servers), "Number of servers") 42 assert.Equal(t, 1, len(config.Servers[0].Users), "Number of auths") 43 assert.Equal(t, &auth1, config.FindUserAuth(url1, user1), "loaded auth for server %s and user %s", url1, user1) 44 assert.Equal(t, &auth1, config.FindUserAuth(url1, ""), "loaded auth for server %s and no user", url1) 45 46 auth2 := auth.UserAuth{ 47 Username: user2, 48 ApiToken: "anotherToken", 49 } 50 config = configTest.SetUserAuth(url1, auth2) 51 52 assert.Equal(t, &auth2, config.FindUserAuth(url1, user2), "Failed to find auth for server %s and user %s", url1, user2) 53 assert.Equal(t, &auth1, config.FindUserAuth(url1, user1), "loaded auth for server %s and user %s", url1, user1) 54 assert.Equal(t, 1, len(config.Servers), "Number of servers") 55 assert.Equal(t, 2, len(config.Servers[0].Users), "Number of auths") 56 assertNoAuth(t, config, url1, userDoesNotExist) 57 58 // lets mutate the auth2 59 auth2.ApiToken = token2v2 60 config = configTest.SetUserAuth(url1, auth2) 61 62 assertNoAuth(t, config, url1, userDoesNotExist) 63 assert.Equal(t, 1, len(config.Servers), "Number of servers") 64 assert.Equal(t, 2, len(config.Servers[0].Users), "Number of auths") 65 assert.Equal(t, &auth1, config.FindUserAuth(url1, user1), "loaded auth for server %s and user %s", url1, user1) 66 assert.Equal(t, &auth2, config.FindUserAuth(url1, user2), "loaded auth for server %s and user %s", url1, user2) 67 68 auth3 := auth.UserAuth{ 69 Username: user1, 70 ApiToken: "server2User1Token", 71 } 72 configTest.SetUserAuth(url2, auth3) 73 74 assertNoAuth(t, config, url1, userDoesNotExist) 75 assert.Equal(t, 2, len(config.Servers), "Number of servers") 76 assert.Equal(t, 2, len(config.Servers[0].Users), "Number of auths for server 0") 77 assert.Equal(t, 1, len(config.Servers[1].Users), "Number of auths for server 1") 78 assert.Equal(t, &auth1, config.FindUserAuth(url1, user1), "loaded auth for server %s and user %s", url1, user1) 79 assert.Equal(t, &auth2, config.FindUserAuth(url1, user2), "loaded auth for server %s and user %s", url1, user2) 80 assert.Equal(t, &auth3, config.FindUserAuth(url2, user1), "loaded auth for server %s and user %s", url2, user1) 81 } 82 83 type ConfigTest struct { 84 t *testing.T 85 svc auth.ConfigService 86 } 87 88 func (c *ConfigTest) Load() *auth.AuthConfig { 89 config, err := c.svc.LoadConfig() 90 require.NoError(c.t, err) 91 return config 92 } 93 94 func (c *ConfigTest) SetUserAuth(url string, auth auth.UserAuth) *auth.AuthConfig { 95 copy := auth 96 c.svc.Config().SetUserAuth(url, ©) 97 c.SaveAndReload() 98 return c.svc.Config() 99 } 100 101 func (c *ConfigTest) SaveAndReload() *auth.AuthConfig { 102 err := c.svc.SaveConfig() 103 require.NoError(c.t, err) 104 return c.Load() 105 } 106 107 func assertNoAuth(t *testing.T, config *auth.AuthConfig, url string, user string) { 108 found := config.FindUserAuth(url, user) 109 if found != nil { 110 assert.Fail(t, "Found auth when not expecting it for server %s and user %s", url, user) 111 } 112 } 113 114 func TestAuthConfigGetsDefaultName(t *testing.T) { 115 t.Parallel() 116 c := &auth.AuthConfig{} 117 118 expectedURL := "https://foo.com" 119 server := c.GetOrCreateServer(expectedURL) 120 assert.NotNil(t, server, "No server found!") 121 assert.True(t, server.Name != "", "Should have a server name!") 122 assert.Equal(t, expectedURL, server.URL, "Server.URL") 123 } 124 125 func TestDeleteServer(t *testing.T) { 126 t.Parallel() 127 c := &auth.AuthConfig{} 128 url := "https://foo.com" 129 server := c.GetOrCreateServer(url) 130 assert.NotNil(t, server, "Failed to add the server to the configuration") 131 assert.Equal(t, 1, len(c.Servers), "No server found in the configuration") 132 133 c.DeleteServer(url) 134 assert.Equal(t, 0, len(c.Servers), "Failed to remove the server from configuration") 135 assert.Equal(t, "", c.CurrentServer, "Should be no current server") 136 } 137 138 func TestDeleteServer2(t *testing.T) { 139 t.Parallel() 140 c := &auth.AuthConfig{} 141 url1 := "https://foo1.com" 142 server1 := c.GetOrCreateServer(url1) 143 assert.NotNil(t, server1, "Failed to add the server to the configuration") 144 url2 := "https://foo2.com" 145 server2 := c.GetOrCreateServer(url2) 146 assert.NotNil(t, server2, "Failed to the server to the configuration!") 147 assert.Equal(t, 2, len(c.Servers), "Must have 2 servers in the configuration") 148 c.CurrentServer = url2 149 150 c.DeleteServer(url2) 151 assert.Equal(t, 1, len(c.Servers), "Failed to remove one server from configuration") 152 assert.Equal(t, url1, c.Servers[0].URL, "Failed to remove the right server from the configuration") 153 assert.Equal(t, url1, c.CurrentServer, "Server 1 should be current server") 154 }