github.com/wostzone/hub/auth@v0.0.0-20220118060317-7bb375743b17/pkg/authservice/AuthService_test.go (about) 1 package authservice_test 2 3 import ( 4 "fmt" 5 "github.com/sirupsen/logrus" 6 "github.com/stretchr/testify/assert" 7 "github.com/wostzone/hub/auth/pkg/authservice" 8 "github.com/wostzone/hub/lib/client/pkg/testenv" 9 "github.com/wostzone/hub/lib/client/pkg/tlsclient" 10 "os" 11 "path" 12 "testing" 13 "time" 14 ) 15 16 var serverAddress = "127.0.0.1" 17 var serverPort uint = 9881 18 var testCerts testenv.TestCerts 19 var passwordFile string 20 var serverCertFolder string 21 var clientHostPort string 22 23 var storeFolder = "" 24 25 const user1 = "user1" 26 const pass1 = "secret1" 27 28 // helper to start the auth service for testing 29 // containing a password for user1 30 func startAuthService() (*authservice.AuthService, error) { 31 config := authservice.AuthServiceConfig{ 32 Address: serverAddress, 33 Port: serverPort, 34 PasswordFile: passwordFile, 35 ConfigStoreFolder: storeFolder, 36 ConfigStoreEnabled: true, 37 } 38 srv := authservice.NewJwtAuthService(config, nil, testCerts.ServerCert, testCerts.CaCert) 39 err := srv.Start() 40 srv.SetPassword(user1, pass1) 41 return srv, err 42 } 43 44 // TestMain runs a http server 45 // Used for all test cases in this package 46 func TestMain(m *testing.M) { 47 logrus.Infof("------ TestMain of AuthService_test ------") 48 clientHostPort = fmt.Sprintf("%s:%d", serverAddress, serverPort) 49 50 cwd, _ := os.Getwd() 51 homeFolder := path.Join(cwd, "..", "..", "test") 52 serverCertFolder = path.Join(homeFolder, "certs") 53 storeFolder = path.Join(homeFolder, "configStore") 54 passwordFile = path.Join(homeFolder, "config", "test.passwd") 55 // empty file 56 fp, _ := os.Create(passwordFile) 57 fp.Close() 58 59 testCerts = testenv.CreateCertBundle() 60 res := m.Run() 61 62 time.Sleep(time.Second) 63 os.Exit(res) 64 } 65 66 // Create and verify a JWT token 67 func TestStartStop(t *testing.T) { 68 //user1 := "user1" 69 srv, err := startAuthService() 70 assert.NoError(t, err) 71 72 // start twice should not break things 73 err = srv.Start() 74 assert.Error(t, err) 75 76 srv.Stop() 77 // stopping twice should not break things 78 srv.Stop() 79 } 80 81 // Create and verify a JWT token 82 func TestStartTwice(t *testing.T) { 83 //user1 := "user1" 84 srv, err := startAuthService() 85 assert.NoError(t, err) 86 87 // run duplicate should fail 88 srv2, err := startAuthService() 89 assert.Error(t, err) 90 srv2.Stop() 91 92 srv.Stop() 93 } 94 95 func TestLogin(t *testing.T) { 96 pass2 := "secret2" 97 srv, err := startAuthService() 98 assert.NoError(t, err) 99 // 100 hostPort := fmt.Sprintf("%s:%d", serverAddress, serverPort) 101 authClient := tlsclient.NewTLSClient(hostPort, testCerts.CaCert) 102 103 accessToken, err := authClient.ConnectWithLoginID(user1, pass1) 104 assert.NoError(t, err) 105 assert.NotEmpty(t, accessToken) 106 107 accessToken, err = authClient.ConnectWithLoginID(user1, pass2) 108 assert.Error(t, err) 109 assert.Empty(t, accessToken) 110 111 srv.Stop() 112 } 113 114 func TestRefresh(t *testing.T) { 115 //user1 := "user1" 116 } 117 118 func TestRefreshInvalid(t *testing.T) { 119 //user1 := "user1" 120 } 121 122 func TestGetConfig(t *testing.T) { 123 srv, err := startAuthService() 124 assert.NoError(t, err) 125 // 126 hostPort := fmt.Sprintf("%s:%d", serverAddress, serverPort) 127 authClient := tlsclient.NewTLSClient(hostPort, testCerts.CaCert) 128 129 accessToken, err := authClient.ConnectWithLoginID(user1, pass1) 130 assert.NoError(t, err) 131 assert.NotEmpty(t, accessToken) 132 133 myConfig := "my configuration object" 134 _, err = authClient.Put(tlsclient.DefaultJWTConfigPath+"/app1", myConfig) 135 assert.NoError(t, err) 136 137 data, err := authClient.Get(tlsclient.DefaultJWTConfigPath + "/app1") 138 assert.NoError(t, err) 139 assert.Equal(t, myConfig, string(data)) 140 141 data, err = authClient.Get(tlsclient.DefaultJWTConfigPath + "/app2") 142 assert.NoError(t, err) 143 assert.Empty(t, data) 144 srv.Stop() 145 146 } 147 148 func TestUpdateConfigBadMethod(t *testing.T) { 149 srv, err := startAuthService() 150 assert.NoError(t, err) 151 152 myConfig := "my configuration object" 153 hostPort := fmt.Sprintf("%s:%d", serverAddress, serverPort) 154 authClient := tlsclient.NewTLSClient(hostPort, testCerts.CaCert) 155 accessToken, err := authClient.ConnectWithLoginID(user1, pass1) 156 _ = accessToken 157 assert.NoError(t, err) 158 159 _, err = authClient.Post(tlsclient.DefaultJWTConfigPath+"/app1", myConfig) 160 assert.Error(t, err) 161 srv.Stop() 162 163 }