| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305 | package controllerimport (	"os"	"testing"	"github.com/gravitl/netmaker/database"	"github.com/gravitl/netmaker/logic"	"github.com/gravitl/netmaker/models"	"github.com/gravitl/netmaker/serverctl"	"github.com/stretchr/testify/assert")type NetworkValidationTestCase struct {	testname   string	network    models.Network	errMessage string}func TestCreateNetwork(t *testing.T) {	database.InitializeDatabase()	deleteAllNetworks()	var network models.Network	network.NetID = "skynet"	network.AddressRange = "10.0.0.1/24"	// if tests break - check here (removed displayname)	//network.DisplayName = "mynetwork"	_, err := logic.CreateNetwork(network)	assert.Nil(t, err)}func TestGetNetwork(t *testing.T) {	database.InitializeDatabase()	createNet()	t.Run("GetExistingNetwork", func(t *testing.T) {		network, err := logic.GetNetwork("skynet")		assert.Nil(t, err)		assert.Equal(t, "skynet", network.NetID)	})	t.Run("GetNonExistantNetwork", func(t *testing.T) {		network, err := logic.GetNetwork("doesnotexist")		assert.EqualError(t, err, "no result found")		assert.Equal(t, "", network.NetID)	})}func TestDeleteNetwork(t *testing.T) {	database.InitializeDatabase()	createNet()	//create nodes	t.Run("NetworkwithNodes", func(t *testing.T) {	})	t.Run("DeleteExistingNetwork", func(t *testing.T) {		err := logic.DeleteNetwork("skynet")		assert.Nil(t, err)	})	t.Run("NonExistantNetwork", func(t *testing.T) {		err := logic.DeleteNetwork("skynet")		assert.Nil(t, err)	})}func TestCreateKey(t *testing.T) {	database.InitializeDatabase()	createNet()	keys, _ := logic.GetKeys("skynet")	for _, key := range keys {		logic.DeleteKey(key.Name, "skynet")	}	var accesskey models.AccessKey	var network models.Network	network.NetID = "skynet"	t.Run("NameTooLong", func(t *testing.T) {		network, err := logic.GetNetwork("skynet")		assert.Nil(t, err)		accesskey.Name = "Thisisareallylongkeynamethatwillfail"		_, err = logic.CreateAccessKey(accesskey, network)		assert.NotNil(t, err)		assert.Contains(t, err.Error(), "Field validation for 'Name' failed on the 'max' tag")	})	t.Run("BlankName", func(t *testing.T) {		network, err := logic.GetNetwork("skynet")		assert.Nil(t, err)		accesskey.Name = ""		key, err := logic.CreateAccessKey(accesskey, network)		assert.Nil(t, err)		assert.NotEqual(t, "", key.Name)	})	t.Run("InvalidValue", func(t *testing.T) {		network, err := logic.GetNetwork("skynet")		assert.Nil(t, err)		accesskey.Value = "bad-value"		_, err = logic.CreateAccessKey(accesskey, network)		assert.NotNil(t, err)		assert.Contains(t, err.Error(), "Field validation for 'Value' failed on the 'alphanum' tag")	})	t.Run("BlankValue", func(t *testing.T) {		network, err := logic.GetNetwork("skynet")		assert.Nil(t, err)		accesskey.Name = "mykey"		accesskey.Value = ""		key, err := logic.CreateAccessKey(accesskey, network)		assert.Nil(t, err)		assert.NotEqual(t, "", key.Value)		assert.Equal(t, accesskey.Name, key.Name)	})	t.Run("ValueTooLong", func(t *testing.T) {		network, err := logic.GetNetwork("skynet")		assert.Nil(t, err)		accesskey.Name = "keyname"		accesskey.Value = "AccessKeyValuethatistoolong"		_, err = logic.CreateAccessKey(accesskey, network)		assert.NotNil(t, err)		assert.Contains(t, err.Error(), "Field validation for 'Value' failed on the 'max' tag")	})	t.Run("BlankUses", func(t *testing.T) {		network, err := logic.GetNetwork("skynet")		assert.Nil(t, err)		accesskey.Uses = 0		accesskey.Value = ""		key, err := logic.CreateAccessKey(accesskey, network)		assert.Nil(t, err)		assert.Equal(t, 1, key.Uses)	})	t.Run("DuplicateKey", func(t *testing.T) {		network, err := logic.GetNetwork("skynet")		assert.Nil(t, err)		accesskey.Name = "mykey"		_, err = logic.CreateAccessKey(accesskey, network)		assert.NotNil(t, err)		assert.EqualError(t, err, "duplicate AccessKey Name")	})}func TestGetKeys(t *testing.T) {	database.InitializeDatabase()	deleteAllNetworks()	createNet()	network, err := logic.GetNetwork("skynet")	assert.Nil(t, err)	var key models.AccessKey	key.Name = "mykey"	_, err = logic.CreateAccessKey(key, network)	assert.Nil(t, err)	t.Run("KeyExists", func(t *testing.T) {		keys, err := logic.GetKeys(network.NetID)		assert.Nil(t, err)		assert.NotEqual(t, models.AccessKey{}, keys)	})	t.Run("NonExistantKey", func(t *testing.T) {		err := logic.DeleteKey("mykey", "skynet")		assert.Nil(t, err)		keys, err := logic.GetKeys(network.NetID)		assert.Nil(t, err)		assert.Equal(t, []models.AccessKey(nil), keys)	})}func TestDeleteKey(t *testing.T) {	database.InitializeDatabase()	createNet()	network, err := logic.GetNetwork("skynet")	assert.Nil(t, err)	var key models.AccessKey	key.Name = "mykey"	_, err = logic.CreateAccessKey(key, network)	assert.Nil(t, err)	t.Run("ExistingKey", func(t *testing.T) {		err := logic.DeleteKey("mykey", "skynet")		assert.Nil(t, err)	})	t.Run("NonExistantKey", func(t *testing.T) {		err := logic.DeleteKey("mykey", "skynet")		assert.NotNil(t, err)		assert.Equal(t, "key mykey does not exist", err.Error())	})}func TestSecurityCheck(t *testing.T) {	//these seem to work but not sure it the tests are really testing the functionality	database.InitializeDatabase()	os.Setenv("MASTER_KEY", "secretkey")	t.Run("NoNetwork", func(t *testing.T) {		err, networks, username := SecurityCheck(false, "", "Bearer secretkey")		assert.Nil(t, err)		t.Log(networks, username)	})	t.Run("WithNetwork", func(t *testing.T) {		err, networks, username := SecurityCheck(false, "skynet", "Bearer secretkey")		assert.Nil(t, err)		t.Log(networks, username)	})	t.Run("BadNet", func(t *testing.T) {		t.Skip()		err, networks, username := SecurityCheck(false, "badnet", "Bearer secretkey")		assert.NotNil(t, err)		t.Log(err)		t.Log(networks, username)	})	t.Run("BadToken", func(t *testing.T) {		err, networks, username := SecurityCheck(false, "skynet", "Bearer badkey")		assert.NotNil(t, err)		t.Log(err)		t.Log(networks, username)	})}func TestValidateNetworkUpdate(t *testing.T) {	t.Skip()	//This functions is not called by anyone	//it panics as validation function 'display_name_valid' is not defined	database.InitializeDatabase()	//yes := true	//no := false	//deleteNet(t)	//DeleteNetworks	cases := []NetworkValidationTestCase{		{			testname: "InvalidAddress",			network: models.Network{				AddressRange: "10.0.0.256",			},			errMessage: "Field validation for 'AddressRange' failed on the 'cidr' tag",		},		{			testname: "InvalidAddress6",			network: models.Network{				AddressRange6: "2607::ag",			},			errMessage: "Field validation for 'AddressRange6' failed on the 'cidr' tag",		},		{			testname: "InvalidNetID",			network: models.Network{				NetID: "contains spaces",			},			errMessage: "Field validation for 'NetID' failed on the 'alphanum' tag",		},		{			testname: "NetIDTooLong",			network: models.Network{				NetID: "LongNetIDName",			},			errMessage: "Field validation for 'NetID' failed on the 'max' tag",		},		{			testname: "ListenPortTooLow",			network: models.Network{				DefaultListenPort: 1023,			},			errMessage: "Field validation for 'DefaultListenPort' failed on the 'min' tag",		},		{			testname: "ListenPortTooHigh",			network: models.Network{				DefaultListenPort: 65536,			},			errMessage: "Field validation for 'DefaultListenPort' failed on the 'max' tag",		},		{			testname: "KeepAliveTooBig",			network: models.Network{				DefaultKeepalive: 1010,			},			errMessage: "Field validation for 'DefaultKeepalive' failed on the 'max' tag",		},		{			testname: "InvalidLocalRange",			network: models.Network{				LocalRange: "192.168.0.1",			},			errMessage: "Field validation for 'LocalRange' failed on the 'cidr' tag",		},	}	for _, tc := range cases {		t.Run(tc.testname, func(t *testing.T) {			network := models.Network(tc.network)			err := logic.ValidateNetworkUpdate(network)			assert.NotNil(t, err)			assert.Contains(t, err.Error(), tc.errMessage)		})	}}func deleteAllNetworks() {	deleteAllNodes()	nets, _ := logic.GetNetworks()	for _, net := range nets {		logic.DeleteNetwork(net.NetID)	}}func createNet() {	var network models.Network	network.NetID = "skynet"	network.AddressRange = "10.0.0.1/24"	_, err := logic.GetNetwork("skynet")	if err != nil {		logic.CreateNetwork(network)	}	serverctl.InitializeCommsNetwork()}
 |