completed crud unit tests

This commit is contained in:
0xdcarns
2023-02-15 15:27:26 -05:00
parent a5e7147b69
commit db4ea9faa4
6 changed files with 82 additions and 41 deletions

View File

@@ -1,7 +1,7 @@
//Environment file for getting variables // Environment file for getting variables
//Currently the only thing it does is set the master password // Currently the only thing it does is set the master password
//Should probably have it take over functions from OS such as port and mongodb connection details // Should probably have it take over functions from OS such as port and mongodb connection details
//Reads from the config/environments/dev.yaml file by default // Reads from the config/environments/dev.yaml file by default
package config package config
import ( import (

View File

@@ -5,7 +5,6 @@ import "testing"
func Test_genKeyName(t *testing.T) { func Test_genKeyName(t *testing.T) {
for i := 0; i < 100; i++ { for i := 0; i < 100; i++ {
kname := genKeyName() kname := genKeyName()
t.Log(kname)
if len(kname) != 20 { if len(kname) != 20 {
t.Fatalf("improper length of key name, expected 20 got :%d", len(kname)) t.Fatalf("improper length of key name, expected 20 got :%d", len(kname))
} }
@@ -15,7 +14,6 @@ func Test_genKeyName(t *testing.T) {
func Test_genKey(t *testing.T) { func Test_genKey(t *testing.T) {
for i := 0; i < 100; i++ { for i := 0; i < 100; i++ {
kname := GenKey() kname := GenKey()
t.Log(kname)
if len(kname) != 16 { if len(kname) != 16 {
t.Fatalf("improper length of key name, expected 16 got :%d", len(kname)) t.Fatalf("improper length of key name, expected 16 got :%d", len(kname))
} }

View File

@@ -12,13 +12,15 @@ import (
// EnrollmentKeyErrors - struct for holding EnrollmentKey error messages // EnrollmentKeyErrors - struct for holding EnrollmentKey error messages
var EnrollmentKeyErrors = struct { var EnrollmentKeyErrors = struct {
InvalidCreate string InvalidCreate string
NoKeyFound string NoKeyFound string
InvalidKey string InvalidKey string
NoUsesRemaining string
}{ }{
InvalidCreate: "invalid enrollment key created", InvalidCreate: "invalid enrollment key created",
NoKeyFound: "no enrollmentkey found", NoKeyFound: "no enrollmentkey found",
InvalidKey: "invalid key provided", InvalidKey: "invalid key provided",
NoUsesRemaining: "no uses remaining",
} }
// CreateEnrollmentKey - creates a new enrollment key in db // CreateEnrollmentKey - creates a new enrollment key in db
@@ -84,9 +86,30 @@ func GetEnrollmentKey(value string) (*models.EnrollmentKey, error) {
// DeleteEnrollmentKey - delete's a given enrollment key by value // DeleteEnrollmentKey - delete's a given enrollment key by value
func DeleteEnrollmentKey(value string) error { func DeleteEnrollmentKey(value string) error {
_, err := GetEnrollmentKey(value)
if err != nil {
return err
}
return database.DeleteRecord(database.ENROLLMENT_KEYS_TABLE_NAME, value) return database.DeleteRecord(database.ENROLLMENT_KEYS_TABLE_NAME, value)
} }
// DecrementEnrollmentKey - decrements the uses on a key if above 0 remaining
func DecrementEnrollmentKey(value string) (*models.EnrollmentKey, error) {
k, err := GetEnrollmentKey(value)
if err != nil {
return nil, err
}
if k.UsesRemaining == 0 {
return nil, fmt.Errorf(EnrollmentKeyErrors.NoUsesRemaining)
}
k.UsesRemaining = k.UsesRemaining - 1
if err = upsertEnrollmentKey(k); err != nil {
return nil, err
}
return k, nil
}
// == private == // == private ==
func upsertEnrollmentKey(k *models.EnrollmentKey) error { func upsertEnrollmentKey(k *models.EnrollmentKey) error {
@@ -106,7 +129,7 @@ func getUniqueEnrollmentID() (string, error) {
return "", err return "", err
} }
newID := ncutils.MakeRandomString(32) newID := ncutils.MakeRandomString(32)
for _, ok := currentKeys[newID]; !ok; { for _, ok := currentKeys[newID]; ok; {
newID = ncutils.MakeRandomString(32) newID = ncutils.MakeRandomString(32)
} }
return newID, nil return newID, nil
@@ -119,6 +142,9 @@ func getEnrollmentKeysMap() (map[string]*models.EnrollmentKey, error) {
return nil, err return nil, err
} }
} }
if records == nil {
records = make(map[string]string)
}
currentKeys := make(map[string]*models.EnrollmentKey) currentKeys := make(map[string]*models.EnrollmentKey)
if len(records) > 0 { if len(records) > 0 {
for k := range records { for k := range records {

View File

@@ -8,12 +8,13 @@ import (
"github.com/stretchr/testify/assert" "github.com/stretchr/testify/assert"
) )
func TestCreate_EnrollmentKey(t *testing.T) { func TestCreateEnrollmentKey(t *testing.T) {
database.InitializeDatabase() database.InitializeDatabase()
defer database.CloseDB() defer database.CloseDB()
t.Run("Can_Not_Create_Key", func(t *testing.T) { t.Run("Can_Not_Create_Key", func(t *testing.T) {
newKey, err := CreateEnrollmentKey(0, time.Time{}, nil, nil, false) newKey, err := CreateEnrollmentKey(0, time.Time{}, nil, nil, false)
assert.Nil(t, newKey) assert.Nil(t, newKey)
assert.NotNil(t, err)
assert.Equal(t, err.Error(), EnrollmentKeyErrors.InvalidCreate) assert.Equal(t, err.Error(), EnrollmentKeyErrors.InvalidCreate)
}) })
t.Run("Can_Create_Key_Uses", func(t *testing.T) { t.Run("Can_Create_Key_Uses", func(t *testing.T) {
@@ -50,20 +51,53 @@ func TestCreate_EnrollmentKey(t *testing.T) {
func TestDelete_EnrollmentKey(t *testing.T) { func TestDelete_EnrollmentKey(t *testing.T) {
database.InitializeDatabase() database.InitializeDatabase()
defer database.CloseDB() defer database.CloseDB()
newKey, _ := CreateEnrollmentKey(0, time.Time{}, []string{"mynet", "skynet"}, nil, true)
t.Run("Can_Delete_Key", func(t *testing.T) {
assert.True(t, newKey.IsValid())
err := DeleteEnrollmentKey(newKey.Value)
assert.Nil(t, err)
oldKey, err := GetEnrollmentKey(newKey.Value)
assert.Nil(t, oldKey)
assert.NotNil(t, err)
assert.Equal(t, err.Error(), EnrollmentKeyErrors.NoKeyFound)
})
t.Run("Can_Not_Delete_Invalid_Key", func(t *testing.T) {
err := DeleteEnrollmentKey("notakey")
assert.NotNil(t, err)
assert.Equal(t, err.Error(), EnrollmentKeyErrors.NoKeyFound)
})
removeAllEnrollments()
} }
func TestDecrement_EnrollmentKey(t *testing.T) { func TestDecrement_EnrollmentKey(t *testing.T) {
database.InitializeDatabase() database.InitializeDatabase()
defer database.CloseDB() defer database.CloseDB()
newKey, _ := CreateEnrollmentKey(1, time.Time{}, nil, nil, true)
t.Run("Check_initial_uses", func(t *testing.T) {
assert.True(t, newKey.IsValid())
assert.Equal(t, newKey.UsesRemaining, 1)
})
t.Run("Check can decrement", func(t *testing.T) {
assert.Equal(t, newKey.UsesRemaining, 1)
k, err := DecrementEnrollmentKey(newKey.Value)
assert.Nil(t, err)
newKey = k
})
t.Run("Check can not decrement", func(t *testing.T) {
assert.Equal(t, newKey.UsesRemaining, 0)
_, err := DecrementEnrollmentKey(newKey.Value)
assert.NotNil(t, err)
assert.Equal(t, err.Error(), EnrollmentKeyErrors.NoUsesRemaining)
})
removeAllEnrollments()
} }
func TestValidity_EnrollmentKey(t *testing.T) { // func TestValidity_EnrollmentKey(t *testing.T) {
database.InitializeDatabase() // database.InitializeDatabase()
defer database.CloseDB() // defer database.CloseDB()
} // }
func removeAllEnrollments() { func removeAllEnrollments() {
database.DeleteAllRecords(database.ENROLLMENT_KEYS_TABLE_NAME) database.DeleteAllRecords(database.ENROLLMENT_KEYS_TABLE_NAME)

View File

@@ -1,38 +1,19 @@
package logic package logic
import ( import (
"context"
"net" "net"
"testing" "testing"
"github.com/google/uuid" "github.com/google/uuid"
"github.com/gravitl/netmaker/database" "github.com/gravitl/netmaker/database"
"github.com/gravitl/netmaker/logger"
"github.com/gravitl/netmaker/models" "github.com/gravitl/netmaker/models"
"github.com/matryer/is" "github.com/matryer/is"
) )
func TestMain(m *testing.M) { func TestCheckPorts(t *testing.T) {
database.InitializeDatabase() database.InitializeDatabase()
defer database.CloseDB() defer database.CloseDB()
CreateAdmin(&models.User{
UserName: "admin",
Password: "password",
IsAdmin: true,
Networks: []string{},
Groups: []string{},
})
peerUpdate := make(chan *models.Node)
go ManageZombies(context.Background(), peerUpdate)
go func() {
for update := range peerUpdate {
//do nothing
logger.Log(3, "received node update", update.Action)
}
}()
}
func TestCheckPorts(t *testing.T) {
h := models.Host{ h := models.Host{
ID: uuid.New(), ID: uuid.New(),
EndpointIP: net.ParseIP("192.168.1.1"), EndpointIP: net.ParseIP("192.168.1.1"),

View File

@@ -1,6 +1,8 @@
package models package models
import "time" import (
"time"
)
// EnrollmentKeyLength - the length of an enrollment key // EnrollmentKeyLength - the length of an enrollment key
const EnrollmentKeyLength = 32 const EnrollmentKeyLength = 32
@@ -23,7 +25,7 @@ func (k *EnrollmentKey) IsValid() bool {
if k.UsesRemaining > 0 { if k.UsesRemaining > 0 {
return true return true
} }
if !k.Expiration.IsZero() && time.Now().After(k.Expiration) { if !k.Expiration.IsZero() && time.Now().Before(k.Expiration) {
return true return true
} }