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, &copy)
    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  }