diff options
| author | Gabriel A. Giovanini <mail@gabrielgio.me> | 2024-10-28 15:58:09 +0100 | 
|---|---|---|
| committer | Gabriel A. Giovanini <mail@gabrielgio.me> | 2024-10-28 15:58:09 +0100 | 
| commit | 2eea4b27109e6f958a31890844e2bb69fbc21a48 (patch) | |
| tree | cccf64236abec66df4e8e8c1348c7229993a7ab0 /pkg/service/auth_test.go | |
| parent | b9b6688c8751b3ff0fe89655683af48eff195501 (diff) | |
| download | cerrado-2eea4b27109e6f958a31890844e2bb69fbc21a48.tar.gz cerrado-2eea4b27109e6f958a31890844e2bb69fbc21a48.tar.bz2 cerrado-2eea4b27109e6f958a31890844e2bb69fbc21a48.zip | |
feat: Add service to handle auth
Diffstat (limited to 'pkg/service/auth_test.go')
| -rw-r--r-- | pkg/service/auth_test.go | 119 | 
1 files changed, 119 insertions, 0 deletions
| diff --git a/pkg/service/auth_test.go b/pkg/service/auth_test.go new file mode 100644 index 0000000..06bf76f --- /dev/null +++ b/pkg/service/auth_test.go @@ -0,0 +1,119 @@ +// go:build unit + +package service + +import ( +	"testing" +) + +func TestCheck(t *testing.T) { +	testCases := []struct { +		name       string +		passphrase []byte +		username   string +		password   string +		wantError  bool +	}{ +		{ +			name:       "generated", +			passphrase: nil, +			username:   "gabrielgio", +			password:   "adminadmin", +			wantError:  false, +		}, +		{ +			name:       "static", +			passphrase: []byte("$2a$14$W2yT0E6Zm8nTecqipHUQGOLC6PvNjIQqpQTW/MZmD5oqDfaBJnBV6"), +			username:   "gabrielgio", +			password:   "adminadmin", +			wantError:  false, +		}, +		{ +			name:       "error", +			passphrase: []byte("This is not a valid hash"), +			username:   "gabrielgio", +			password:   "adminadmin", +			wantError:  true, +		}, +	} + +	for _, tc := range testCases { +		t.Run(tc.name, func(t *testing.T) { +			mock := &mockAuthRepository{ +				username:   tc.username, +				password:   tc.password, +				passphrase: tc.passphrase, +			} + +			service := AuthService{authRepository: mock} + +			if service.CheckAuth(tc.username, tc.password) == tc.wantError { +				t.Errorf("Invalid result, wanted %t got %t", tc.wantError, !tc.wantError) +			} +		}) +	} +} + +func TestValidate(t *testing.T) { +	testCases := []struct { +		name   string +		aesKey []byte +	}{ +		{ +			name:   "generated", +			aesKey: nil, +		}, +		{ +			name:   "static", +			aesKey: []byte("RTGkmunKmi5agh7jaqENunG2zI/godnkqhHaHyX/AVg="), +		}, +	} + +	for _, tc := range testCases { +		t.Run(tc.name, func(t *testing.T) { +			mock := &mockAuthRepository{ +				aesKey: tc.aesKey, +			} + +			service := AuthService{authRepository: mock} + +			token, err := service.IssueToken() +			if err != nil { +				t.Fatalf("Error issuing token: %s", err.Error()) +			} + +			v, err := service.ValidateToken(token) +			if err != nil { +				t.Fatalf("Error validating token: %s", err.Error()) +			} + +			if !v { +				t.Error("Invalid token generated") +			} +		}) +	} +} + +type mockAuthRepository struct { +	username   string +	password   string +	passphrase []byte + +	aesKey []byte +} + +func (m *mockAuthRepository) GetPassphrase() []byte { +	if m.passphrase == nil { +		hash, _ := GenerateHash(m.username, m.password) +		m.passphrase = []byte(hash) +	} +	return m.passphrase +} + +func (m *mockAuthRepository) GetBase64AesKey() []byte { +	if m.aesKey == nil { +		key, _ := GenerateAesKey() +		m.aesKey = []byte(key) +	} +	return m.aesKey +} | 
