Browse Source

Test Cleanup

Matthew R Kasun 4 years ago
parent
commit
a827f8caad

+ 27 - 43
controllers/networkHttpController.go

@@ -295,13 +295,9 @@ func AlertNetwork(netid string) error {
 
 
 //Update a network
 //Update a network
 func updateNetwork(w http.ResponseWriter, r *http.Request) {
 func updateNetwork(w http.ResponseWriter, r *http.Request) {
-
 	w.Header().Set("Content-Type", "application/json")
 	w.Header().Set("Content-Type", "application/json")
-
 	var params = mux.Vars(r)
 	var params = mux.Vars(r)
-
 	var network models.Network
 	var network models.Network
-
 	network, err := functions.GetParentNetwork(params["networkname"])
 	network, err := functions.GetParentNetwork(params["networkname"])
 	if err != nil {
 	if err != nil {
 		returnErrorResponse(w, r, formatError(err, "internal"))
 		returnErrorResponse(w, r, formatError(err, "internal"))
@@ -310,10 +306,6 @@ func updateNetwork(w http.ResponseWriter, r *http.Request) {
 
 
 	var networkChange models.NetworkUpdate
 	var networkChange models.NetworkUpdate
 
 
-	haschange := false
-	hasrangeupdate := false
-	haslocalrangeupdate := false
-
 	_ = json.NewDecoder(r.Body).Decode(&networkChange)
 	_ = json.NewDecoder(r.Body).Decode(&networkChange)
 	if networkChange.AddressRange == "" {
 	if networkChange.AddressRange == "" {
 		networkChange.AddressRange = network.AddressRange
 		networkChange.AddressRange = network.AddressRange
@@ -330,39 +322,36 @@ func updateNetwork(w http.ResponseWriter, r *http.Request) {
 		returnErrorResponse(w, r, formatError(err, "badrequest"))
 		returnErrorResponse(w, r, formatError(err, "badrequest"))
 		return
 		return
 	}
 	}
+	returnednetwork, err := UpdateNetwork(networkChange, network)
+	if err != nil {
+		returnErrorResponse(w, r, formatError(err, "badrequest"))
+		return
+	}
+
+	w.WriteHeader(http.StatusOK)
+	json.NewEncoder(w).Encode(returnednetwork)
+}
 
 
+func UpdateNetwork(networkChange models.NetworkUpdate, network models.Network) (models.Network, error) {
 	//NOTE: Network.NetID is intentionally NOT editable. It acts as a static ID for the network.
 	//NOTE: Network.NetID is intentionally NOT editable. It acts as a static ID for the network.
 	//DisplayName can be changed instead, which is what shows on the front end
 	//DisplayName can be changed instead, which is what shows on the front end
 	if networkChange.NetID != network.NetID {
 	if networkChange.NetID != network.NetID {
-		returnErrorResponse(w, r, formatError(errors.New("NetID is not editable"), "badrequest"))
-		return
+		return models.Network{}, errors.New("NetID is not editable")
 	}
 	}
-	//MRK:  I think this code block is redundant.  valdiateNetworkUpdate(networkChange) covers this
-	if networkChange.AddressRange != "" {
 
 
-		network.AddressRange = networkChange.AddressRange
+	haschange := false
+	hasrangeupdate := false
+	haslocalrangeupdate := false
 
 
-		var isAddressOK bool = functions.IsIpCIDR(networkChange.AddressRange)
-		if !isAddressOK {
-			err := errors.New("Invalid Range of " + networkChange.AddressRange + " for addresses.")
-			returnErrorResponse(w, r, formatError(err, "internal"))
-			return
-		}
+	if networkChange.AddressRange != "" {
 		haschange = true
 		haschange = true
 		hasrangeupdate = true
 		hasrangeupdate = true
-
+		network.AddressRange = networkChange.AddressRange
 	}
 	}
 	if networkChange.LocalRange != "" {
 	if networkChange.LocalRange != "" {
-		network.LocalRange = networkChange.LocalRange
-
-		var isAddressOK bool = functions.IsIpCIDR(networkChange.LocalRange)
-		if !isAddressOK {
-			err := errors.New("Invalid Range of " + networkChange.LocalRange + " for internal addresses.")
-			returnErrorResponse(w, r, formatError(err, "internal"))
-			return
-		}
 		haschange = true
 		haschange = true
 		haslocalrangeupdate = true
 		haslocalrangeupdate = true
+		network.LocalRange = networkChange.LocalRange
 	}
 	}
 	if networkChange.IsLocal != nil {
 	if networkChange.IsLocal != nil {
 		network.IsLocal = networkChange.IsLocal
 		network.IsLocal = networkChange.IsLocal
@@ -405,7 +394,7 @@ func updateNetwork(w http.ResponseWriter, r *http.Request) {
 
 
 	collection := mongoconn.Client.Database("netmaker").Collection("networks")
 	collection := mongoconn.Client.Database("netmaker").Collection("networks")
 	ctx, cancel := context.WithTimeout(context.Background(), 10*time.Second)
 	ctx, cancel := context.WithTimeout(context.Background(), 10*time.Second)
-	filter := bson.M{"netid": params["networkname"]}
+	filter := bson.M{"netid": network.NetID}
 
 
 	if haschange {
 	if haschange {
 		network.SetNetworkLastModified()
 		network.SetNetworkLastModified()
@@ -432,38 +421,32 @@ func updateNetwork(w http.ResponseWriter, r *http.Request) {
 		}},
 		}},
 	}
 	}
 
 
-	err = collection.FindOneAndUpdate(ctx, filter, update).Decode(&network)
+	err := collection.FindOneAndUpdate(ctx, filter, update).Decode(&network)
 	defer cancel()
 	defer cancel()
 
 
 	if err != nil {
 	if err != nil {
-		returnErrorResponse(w, r, formatError(err, "internal"))
-		return
+		return models.Network{}, err
 	}
 	}
 
 
 	//Cycles through nodes and gives them new IP's based on the new range
 	//Cycles through nodes and gives them new IP's based on the new range
 	//Pretty cool, but also pretty inefficient currently
 	//Pretty cool, but also pretty inefficient currently
 	if hasrangeupdate {
 	if hasrangeupdate {
-		err = functions.UpdateNetworkNodeAddresses(params["networkname"])
+		err = functions.UpdateNetworkNodeAddresses(network.NetID)
 		if err != nil {
 		if err != nil {
-			returnErrorResponse(w, r, formatError(err, "internal"))
-			return
+			return models.Network{}, err
 		}
 		}
 	}
 	}
 	if haslocalrangeupdate {
 	if haslocalrangeupdate {
-		err = functions.UpdateNetworkPrivateAddresses(params["networkname"])
+		err = functions.UpdateNetworkPrivateAddresses(network.NetID)
 		if err != nil {
 		if err != nil {
-			returnErrorResponse(w, r, formatError(err, "internal"))
-			return
+			return models.Network{}, err
 		}
 		}
 	}
 	}
 	returnnetwork, err := functions.GetParentNetwork(network.NetID)
 	returnnetwork, err := functions.GetParentNetwork(network.NetID)
 	if err != nil {
 	if err != nil {
-		returnErrorResponse(w, r, formatError(err, "internal"))
-		return
+		return models.Network{}, err
 	}
 	}
-
-	w.WriteHeader(http.StatusOK)
-	json.NewEncoder(w).Encode(returnnetwork)
+	return returnnetwork, nil
 }
 }
 
 
 //Delete a network
 //Delete a network
@@ -600,6 +583,7 @@ func createAccessKey(w http.ResponseWriter, r *http.Request) {
 }
 }
 
 
 func CreateAccessKey(accesskey models.AccessKey, network models.Network) (models.AccessKey, error) {
 func CreateAccessKey(accesskey models.AccessKey, network models.Network) (models.AccessKey, error) {
+	fmt.Println(accesskey)
 	if accesskey.Name == "" {
 	if accesskey.Name == "" {
 		accesskey.Name = functions.GenKeyName()
 		accesskey.Name = functions.GenKeyName()
 	}
 	}

+ 22 - 0
controllers/networkHttpController_test.go

@@ -31,6 +31,10 @@ func createNet() {
 		CreateNetwork(network)
 		CreateNetwork(network)
 	}
 	}
 }
 }
+func getNet() models.Network {
+	network, _ := GetNetwork("skynet")
+	return network
+}
 
 
 func TestGetNetworks(t *testing.T) {
 func TestGetNetworks(t *testing.T) {
 	//calls functions.ListNetworks --- nothing to be done
 	//calls functions.ListNetworks --- nothing to be done
@@ -88,6 +92,24 @@ func TestGetNetwork(t *testing.T) {
 	})
 	})
 }
 }
 func TestUpdateNetwork(t *testing.T) {
 func TestUpdateNetwork(t *testing.T) {
+	createNet()
+	network := getNet()
+	t.Run("NetID", func(t *testing.T) {
+		var networkupdate models.NetworkUpdate
+		networkupdate.NetID = "wirecat"
+		_, err := UpdateNetwork(networkupdate, network)
+		assert.NotNil(t, err)
+		assert.Equal(t, "NetID is not editable", err.Error())
+	})
+	t.Run("LocalRange", func(t *testing.T) {
+		var networkupdate models.NetworkUpdate
+		//NetID needs to be set as it will be in updateNetwork
+		networkupdate.NetID = "skynet"
+		networkupdate.LocalRange = "192.168.0.1/24"
+		update, err := UpdateNetwork(networkupdate, network)
+		assert.Nil(t, err)
+		t.Log(err, update)
+	})
 }
 }
 
 
 func TestKeyUpdate(t *testing.T) {
 func TestKeyUpdate(t *testing.T) {

+ 1 - 1
models/network.go

@@ -44,7 +44,7 @@ type NetworkUpdate struct {
 	AddressRange6 string `json:"addressrange6" bson:"addressrange6" validate:"omitempty,cidr"`
 	AddressRange6 string `json:"addressrange6" bson:"addressrange6" validate:"omitempty,cidr"`
 	//can't have min=1 with omitempty
 	//can't have min=1 with omitempty
 	DisplayName         string      `json:"displayname,omitempty" bson:"displayname,omitempty" validate:"omitempty,alphanum,min=2,max=20"`
 	DisplayName         string      `json:"displayname,omitempty" bson:"displayname,omitempty" validate:"omitempty,alphanum,min=2,max=20"`
-	NetID               string      `json:"netid" bson:"netid" validate:"alphanum,min=1,max=12"`
+	NetID               string      `json:"netid" bson:"netid" validate:"omitempty,alphanum,min=1,max=12"`
 	NodesLastModified   int64       `json:"nodeslastmodified" bson:"nodeslastmodified"`
 	NodesLastModified   int64       `json:"nodeslastmodified" bson:"nodeslastmodified"`
 	NetworkLastModified int64       `json:"networklastmodified" bson:"networklastmodified"`
 	NetworkLastModified int64       `json:"networklastmodified" bson:"networklastmodified"`
 	DefaultInterface    string      `json:"defaultinterface" bson:"defaultinterface"`
 	DefaultInterface    string      `json:"defaultinterface" bson:"defaultinterface"`

+ 4 - 0
test/api_test.go

@@ -152,15 +152,19 @@ func createKey(t *testing.T) {
 }
 }
 
 
 func createAccessKey(t *testing.T) (key models.AccessKey) {
 func createAccessKey(t *testing.T) (key models.AccessKey) {
+	//delete existing key if
+	_, _ = api(t, "", http.MethodDelete, baseURL+"/api/networks/skynet/keys/skynet", "secretkey")
 	createkey := models.AccessKey{}
 	createkey := models.AccessKey{}
 	createkey.Name = "skynet"
 	createkey.Name = "skynet"
 	createkey.Uses = 10
 	createkey.Uses = 10
 	response, err := api(t, createkey, http.MethodPost, baseURL+"/api/networks/skynet/keys", "secretkey")
 	response, err := api(t, createkey, http.MethodPost, baseURL+"/api/networks/skynet/keys", "secretkey")
+	t.Log(err, response)
 	assert.Nil(t, err, err)
 	assert.Nil(t, err, err)
 	assert.Equal(t, http.StatusOK, response.StatusCode)
 	assert.Equal(t, http.StatusOK, response.StatusCode)
 	defer response.Body.Close()
 	defer response.Body.Close()
 	err = json.NewDecoder(response.Body).Decode(&key)
 	err = json.NewDecoder(response.Body).Decode(&key)
 	assert.Nil(t, err, err)
 	assert.Nil(t, err, err)
+	t.Log("key is ", key)
 	return key
 	return key
 }
 }
 
 

+ 2 - 2
test/node_test.go

@@ -503,8 +503,8 @@ func TestCreateNode(t *testing.T) {
 		assert.Contains(t, "W1R3: Network does not exist! ", message.Message)
 		assert.Contains(t, "W1R3: Network does not exist! ", message.Message)
 	})
 	})
 	t.Run("Valid", func(t *testing.T) {
 	t.Run("Valid", func(t *testing.T) {
-		setup(t)
-		deleteNode(t)
+		deleteNetworks(t)
+		createNetwork(t)
 		key := createAccessKey(t)
 		key := createAccessKey(t)
 
 
 		var node models.Node
 		var node models.Node