109 lines
4.1 KiB
Go
109 lines
4.1 KiB
Go
package core
|
|
|
|
import (
|
|
"github.com/stretchr/testify/assert"
|
|
"go-nkode/util"
|
|
"os"
|
|
"testing"
|
|
)
|
|
|
|
func TestNKodeAPI(t *testing.T) {
|
|
//db1 := NewInMemoryDb()
|
|
//testNKodeAPI(t, &db1)
|
|
|
|
dbFile := os.Getenv("TEST_DB")
|
|
|
|
db2 := NewSqliteDB(dbFile)
|
|
defer db2.CloseDb()
|
|
testNKodeAPI(t, db2)
|
|
|
|
//if _, err := os.Stat(dbFile); err == nil {
|
|
// err = os.Remove(dbFile)
|
|
// assert.NoError(t, err)
|
|
//} else {
|
|
// assert.NoError(t, err)
|
|
//}
|
|
}
|
|
|
|
func testNKodeAPI(t *testing.T, db DbAccessor) {
|
|
bufferSize := 100
|
|
emailsPerSec := 14
|
|
testClient := TestEmailClient{}
|
|
queue := NewEmailQueue(bufferSize, emailsPerSec, &testClient)
|
|
queue.Start()
|
|
defer queue.Stop()
|
|
attrsPerKey := 5
|
|
numbOfKeys := 4
|
|
for idx := 0; idx < 1; idx++ {
|
|
userEmail := UserEmail("test_username" + util.GenerateRandomString(12) + "@example.com")
|
|
passcodeLen := 4
|
|
nkodePolicy := NewDefaultNKodePolicy()
|
|
keypadSize := KeypadDimension{AttrsPerKey: attrsPerKey, NumbOfKeys: numbOfKeys}
|
|
nkodeApi := NewNKodeAPI(db, queue)
|
|
customerId, err := nkodeApi.CreateNewCustomer(nkodePolicy, nil)
|
|
assert.NoError(t, err)
|
|
signupResponse, err := nkodeApi.GenerateSignupResetInterface(userEmail, *customerId, keypadSize, false)
|
|
assert.NoError(t, err)
|
|
setInterface := signupResponse.UserIdxInterface
|
|
sessionIdStr := signupResponse.SessionId
|
|
sessionId, err := SessionIdFromString(sessionIdStr)
|
|
assert.NoError(t, err)
|
|
keypadSize = KeypadDimension{AttrsPerKey: numbOfKeys, NumbOfKeys: numbOfKeys}
|
|
userPasscode := setInterface[:passcodeLen]
|
|
setKeySelect, err := SelectKeyByAttrIdx(setInterface, userPasscode, keypadSize)
|
|
assert.NoError(t, err)
|
|
confirmInterface, err := nkodeApi.SetNKode(*customerId, sessionId, setKeySelect)
|
|
assert.NoError(t, err)
|
|
confirmKeySelect, err := SelectKeyByAttrIdx(confirmInterface, userPasscode, keypadSize)
|
|
err = nkodeApi.ConfirmNKode(*customerId, sessionId, confirmKeySelect)
|
|
assert.NoError(t, err)
|
|
|
|
keypadSize = KeypadDimension{AttrsPerKey: attrsPerKey, NumbOfKeys: numbOfKeys}
|
|
loginInterface, err := nkodeApi.GetLoginInterface(userEmail, *customerId)
|
|
assert.NoError(t, err)
|
|
loginKeySelection, err := SelectKeyByAttrIdx(loginInterface.UserIdxInterface, userPasscode, keypadSize)
|
|
assert.NoError(t, err)
|
|
_, err = nkodeApi.Login(*customerId, userEmail, loginKeySelection)
|
|
assert.NoError(t, err)
|
|
|
|
err = nkodeApi.RenewAttributes(*customerId)
|
|
assert.NoError(t, err)
|
|
|
|
loginInterface, err = nkodeApi.GetLoginInterface(userEmail, *customerId)
|
|
assert.NoError(t, err)
|
|
loginKeySelection, err = SelectKeyByAttrIdx(loginInterface.UserIdxInterface, userPasscode, keypadSize)
|
|
assert.NoError(t, err)
|
|
_, err = nkodeApi.Login(*customerId, userEmail, loginKeySelection)
|
|
assert.NoError(t, err)
|
|
|
|
/// Reset nKode
|
|
attrsPerKey = 6
|
|
keypadSize = KeypadDimension{AttrsPerKey: attrsPerKey, NumbOfKeys: numbOfKeys}
|
|
resetResponse, err := nkodeApi.GenerateSignupResetInterface(userEmail, *customerId, keypadSize, true)
|
|
assert.NoError(t, err)
|
|
setInterface = resetResponse.UserIdxInterface
|
|
sessionIdStr = resetResponse.SessionId
|
|
sessionId, err = SessionIdFromString(sessionIdStr)
|
|
assert.NoError(t, err)
|
|
keypadSize = KeypadDimension{AttrsPerKey: numbOfKeys, NumbOfKeys: numbOfKeys}
|
|
userPasscode = setInterface[:passcodeLen+1]
|
|
setKeySelect, err = SelectKeyByAttrIdx(setInterface, userPasscode, keypadSize)
|
|
assert.NoError(t, err)
|
|
confirmInterface, err = nkodeApi.SetNKode(*customerId, sessionId, setKeySelect)
|
|
assert.NoError(t, err)
|
|
confirmKeySelect, err = SelectKeyByAttrIdx(confirmInterface, userPasscode, keypadSize)
|
|
err = nkodeApi.ConfirmNKode(*customerId, sessionId, confirmKeySelect)
|
|
assert.NoError(t, err)
|
|
|
|
keypadSize = KeypadDimension{AttrsPerKey: attrsPerKey, NumbOfKeys: numbOfKeys}
|
|
loginInterface2, err := nkodeApi.GetLoginInterface(userEmail, *customerId)
|
|
assert.NoError(t, err)
|
|
loginKeySelection, err = SelectKeyByAttrIdx(loginInterface2.UserIdxInterface, userPasscode, keypadSize)
|
|
assert.NoError(t, err)
|
|
_, err = nkodeApi.Login(*customerId, userEmail, loginKeySelection)
|
|
assert.NoError(t, err)
|
|
signupResponse, err = nkodeApi.GenerateSignupResetInterface(userEmail, *customerId, keypadSize, false)
|
|
assert.Error(t, err)
|
|
}
|
|
}
|