github.com/wostzone/hub/auth@v0.0.0-20220118060317-7bb375743b17/pkg/authenticate/Authenticator_test.go (about) 1 package authenticate_test 2 3 import ( 4 "os" 5 "path" 6 "testing" 7 "time" 8 9 "github.com/sirupsen/logrus" 10 "github.com/stretchr/testify/assert" 11 "github.com/wostzone/hub/auth/pkg/authenticate" 12 "github.com/wostzone/hub/auth/pkg/unpwstore" 13 "github.com/wostzone/hub/lib/client/pkg/config" 14 ) 15 16 const unpwFileName = "test.passwd" 17 18 var unpwFilePath string 19 20 // TestMain for all auth tests, setup of default folders and filenames 21 func TestMain(m *testing.M) { 22 config.SetLogging("info", "") 23 cwd, _ := os.Getwd() 24 homeFolder := path.Join(cwd, "../../test") 25 configFolder := path.Join(homeFolder, "config") 26 27 // Make sure password file exist 28 unpwFilePath = path.Join(configFolder, unpwFileName) 29 fp, _ := os.Create(unpwFilePath) 30 fp.Close() 31 // creating these files takes a bit of time, 32 time.Sleep(time.Second) 33 34 res := m.Run() 35 os.Exit(res) 36 } 37 38 // Create auth handler with empty username/pw 39 func createEmptyTestAuthenticator() *authenticate.Authenticator { 40 fp, _ := os.Create(unpwFilePath) 41 fp.Close() 42 unpwStore := unpwstore.NewPasswordFileStore(unpwFilePath, "createEmptyTestAuthHandler") 43 ah := authenticate.NewAuthenticator(unpwStore) 44 return ah 45 } 46 47 func TestAuthenticatorStartStop(t *testing.T) { 48 logrus.Infof("---TestAuthenticatorStartStop---") 49 ah := createEmptyTestAuthenticator() 50 err := ah.Start() 51 time.Sleep(time.Second * 1) 52 assert.NoError(t, err) 53 ah.Stop() 54 } 55 56 func TestAuthHandlerBadStart(t *testing.T) { 57 logrus.Infof("---TestAuthHandlerBadStart---") 58 unpwStore := unpwstore.NewPasswordFileStore("/bad/file", "TestAuthHandlerBadStart") 59 ah := authenticate.NewAuthenticator(unpwStore) 60 61 // opening the password store should fail 62 err := ah.Start() 63 assert.Error(t, err) 64 ah.Stop() 65 66 // 67 ah = authenticate.NewAuthenticator(nil) 68 err = ah.Start() 69 assert.Error(t, err) 70 71 // should not blow up without password store 72 match := ah.VerifyUsernamePassword("user1", "user1") 73 assert.False(t, match) 74 75 } 76 77 func TestUnpwMatch(t *testing.T) { 78 logrus.Infof("---TestUnpwMatch---") 79 userName1 := "user1" // as in test file 80 userName2 := "user2" // as in test file 81 password1 := "password1" 82 password2 := "password2" 83 84 ah := createEmptyTestAuthenticator() 85 ah.Start() 86 err := ah.SetPassword(userName1, password1) 87 assert.NoError(t, err) 88 89 err = ah.SetPassword(userName2, password2) 90 assert.NoError(t, err) 91 92 err = ah.SetPassword(userName2, "") 93 assert.Error(t, err) 94 95 err = ah.SetPassword("", password2) 96 assert.Error(t, err) 97 98 match := ah.VerifyUsernamePassword(userName1, password1) 99 assert.True(t, match) 100 101 match = ah.VerifyUsernamePassword(userName1, password2) 102 assert.False(t, match) 103 104 match = ah.VerifyUsernamePassword("notauser", password1) 105 assert.False(t, match) 106 107 ah.Stop() 108 } 109 110 func TestBadHashAlgo(t *testing.T) { 111 logrus.Infof("---TestBadHashAlgo---") 112 password1 := "password1" 113 _, err := authenticate.CreatePasswordHash(password1, "Badalgo", 0) 114 assert.Error(t, err) 115 _, err = authenticate.CreatePasswordHash("", "", 0) 116 assert.Error(t, err) 117 118 hash, err := authenticate.CreatePasswordHash("user1", authenticate.PWHASH_ARGON2id, 0) 119 assert.NoError(t, err) 120 ah := createEmptyTestAuthenticator() 121 match := ah.VerifyPasswordHash(hash, "password1", "badalgo") 122 assert.False(t, match) 123 } 124 125 func TestBCrypt(t *testing.T) { 126 logrus.Infof("---TestBCrypt---") 127 var password1 = "password1" 128 ah := createEmptyTestAuthenticator() 129 err := ah.Start() 130 assert.NoError(t, err) 131 hash, err := authenticate.CreatePasswordHash(password1, authenticate.PWHASH_BCRYPT, 0) 132 assert.NoError(t, err) 133 match := ah.VerifyPasswordHash(hash, password1, authenticate.PWHASH_BCRYPT) 134 assert.True(t, match) 135 ah.Stop() 136 }