Skip to content
Snippets Groups Projects
ipam_vrfs_basic_test.go 7.3 KiB
Newer Older
  • Learn to ignore specific revisions
  • Christoph Glaubitz's avatar
    Christoph Glaubitz committed
    // Copyright 2017 The go-netbox Authors.
    //
    // Licensed under the Apache License, Version 2.0 (the "License");
    // you may not use this file except in compliance with the License.
    // You may obtain a copy of the License at
    //
    //   http://www.apache.org/licenses/LICENSE-2.0
    //
    // Unless required by applicable law or agreed to in writing, software
    // distributed under the License is distributed on an "AS IS" BASIS,
    // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
    // See the License for the specific language governing permissions and
    // limitations under the License.
    
    // Code generated by generate_basic_tests.go. DO NOT EDIT.
    
    package netbox
    
    import (
    	"encoding/json"
    	"errors"
    	"fmt"
    	"net/http"
    	"reflect"
    	"testing"
    )
    
    // Using this to override MarshalJSON
    // In all cases when posting data to netbox-API, the VRF.MarshalJSON is what you want,
    // but not here as a return in testHandler
    type serverDataVRF VRF
    
    func convertToServerDataVRF(data []*VRF) []*serverDataVRF {
    	dataWant := make([]*serverDataVRF, len(data))
    	for i := range data {
    		tmp := serverDataVRF(*data[i])
    		dataWant[i] = &tmp
    	}
    	return dataWant
    }
    
    func TestBasicVRFGet(t *testing.T) {
    	var tests = []struct {
    		desc string
    		want *VRF
    	}{
    		{
    			desc: "Simple VRF",
    			want: testVRF(1),
    		},
    	}
    
    	for i, tt := range tests {
    		t.Run(fmt.Sprintf("[%d] %s", i, tt.desc), func(t *testing.T) {
    			serverData := serverDataVRF(*tt.want)
    
    			c, done := testClient(t, testHandler(t, http.MethodGet, "/api/ipam/vrfs/1/", &serverData))
    			defer done()
    
    			res, err := c.IPAM.VRFs.Get(1)
    			if err != nil {
    				t.Fatalf("unexpected error from Client.IPAM.VRFs.Get: %v", err)
    			}
    
    			if want, got := tt.want, res; !reflect.DeepEqual(want, got) {
    				t.Fatalf("unexpected VRF:\n- want: %v\n-  got: %v", want, got)
    			}
    		})
    	}
    }
    
    func TestBasicVRFGet404(t *testing.T) {
    	c, done := testClient(t, testStatusHandler(t, http.MethodGet, "/api/ipam/vrfs/1/", &struct {
    		Detail string `json:"detail"`
    	}{
    		Detail: "Not found.",
    	},
    		http.StatusNotFound))
    	defer done()
    
    	res, err := c.IPAM.VRFs.Get(1)
    	errstr := "404 - Not found."
    	if want, got := errors.New(errstr), err; !reflect.DeepEqual(want, got) {
    		t.Fatalf("unexpected error from Client.IPAM.VRFs.Get:\n- want: %v\n-  got: %v", want, got)
    	}
    
    	if res != nil {
    		t.Fatalf("unexpected result:\n- want: %v\n-  got: %v", nil, res)
    	}
    }
    
    func TestBasicListExtractVRF(t *testing.T) {
    	want := []*VRF{
    		testVRF(1),
    		testVRF(2),
    	}
    	serverWant := convertToServerDataVRF(want)
    	serverData, _ := json.Marshal(serverWant)
    	c, done := testClient(t, testHandler(t, http.MethodGet, "/api/ipam/vrfs/", &pageData{
    		Count:       2,
    		NextURL:     "",
    		PreviousURL: "",
    		Results:     serverData,
    	}))
    	defer done()
    
    	page := c.IPAM.VRFs.List(nil)
    
    	if page == nil {
    		t.Fatalf("unexpexted result from c.IPAM.VRFs.List.")
    	}
    
    	got := []*VRF{}
    	counter := 0
    	for page.Next() {
    		var err error
    		got, err = c.IPAM.VRFs.Extract(page)
    		if err != nil {
    			t.Fatalf("unexpected error from c.IPAM.VRFs.Extract: %v", err)
    		}
    		counter = counter + 1
    		if counter > 2 { // Safe guard
    			break
    		}
    	}
    	if counter != 1 {
    		t.Fatalf("unexpected page count:\n- want: 1\n-  got: %d", counter)
    	}
    
    	if !reflect.DeepEqual(want, got) {
    		t.Fatalf("unexpected result:\n- want: %v\n-  got: %v", want, got)
    	}
    
    	if page.Err() != nil {
    		t.Fatalf("unexpected error from page:\n- want: %v\n-  got: %v", want, got)
    	}
    }
    
    func TestBasicCreateVRF(t *testing.T) {
    	var tests = []struct {
    		desc       string
    		data       *VRF
    		want       int
    		serverData interface{}
    		status     int
    		errstr     string
    	}{
    		{
    			desc:       "Create with ID 0",
    			data:       testVRFCreate(1),
    			want:       1,
    			status:     0,
    			errstr:     "",
    			serverData: testVRF(1),
    		},
    		{
    			desc:   "Create duplicate",
    			data:   testVRFCreate(1),
    			want:   0,
    			status: http.StatusBadRequest,
    			errstr: "400 - {\"name\":[\"IpamVRFService with this name already exists.\"]}\n",
    			serverData: &struct {
    				Name []string `json:"name"`
    			}{
    				Name: []string{"IpamVRFService with this name already exists."},
    			},
    		},
    	}
    
    	for i, tt := range tests {
    		t.Run(fmt.Sprintf("[%d] %s", i, tt.desc), func(t *testing.T) {
    			c, done := testClient(t, testStatusHandler(t, http.MethodPost, "/api/ipam/vrfs/", tt.serverData, tt.status))
    			defer done()
    
    			var terr error
    			if tt.errstr != "" {
    				terr = errors.New(tt.errstr) // Using errstr and initialize real err here, to satisfy golint
    			}
    
    			res, err := c.IPAM.VRFs.Create(tt.data)
    			if want, got := terr, err; !reflect.DeepEqual(want, got) {
    				t.Fatalf("unexpected error:\n- want: %v\n-  got: %v", want, got)
    			}
    			if want, got := tt.want, res; !reflect.DeepEqual(want, got) {
    				t.Fatalf("unexpected VRF:\n- want: %v\n-  got: %v", want, got)
    			}
    		})
    	}
    }
    
    func TestBasicUpdateVRF(t *testing.T) {
    	var tests = []struct {
    		desc       string
    		data       *VRF
    		want       int
    		serverData interface{}
    		status     int
    		errstr     string
    	}{
    		{
    			desc:       "Update with ID 1",
    			data:       testVRF(1),
    			want:       1,
    			serverData: testVRF(1),
    			status:     0,
    			errstr:     "",
    		},
    		{
    			desc: "Update not found",
    			data: testVRF(1),
    			want: 0,
    			serverData: &struct {
    				Detail string
    			}{
    				Detail: "Not found.",
    			},
    			status: http.StatusNotFound,
    			errstr: "404 - Not found.",
    		},
    		{
    			desc: "Update to duplicate",
    			data: testVRF(1),
    			want: 0,
    			serverData: &struct {
    				Name []string `json:"name"`
    			}{
    				Name: []string{"IpamVRFService with this name already exists."},
    			},
    			status: http.StatusBadRequest,
    			errstr: "400 - {\"name\":[\"IpamVRFService with this name already exists.\"]}\n",
    		},
    	}
    
    	for i, tt := range tests {
    		t.Run(fmt.Sprintf("[%d] %s", i, tt.desc), func(t *testing.T) {
    			c, done := testClient(t, testStatusHandler(t, http.MethodPatch, "/api/ipam/vrfs/1/", tt.serverData, tt.status))
    			defer done()
    
    			var terr error
    			if tt.errstr != "" {
    				terr = errors.New(tt.errstr) // Using errstr and initialize real err here, to satisfy golint
    			}
    
    			res, err := c.IPAM.VRFs.Update(tt.data)
    			if want, got := terr, err; !reflect.DeepEqual(want, got) {
    				t.Fatalf("unexpected error:\n- want: %v\n-  got: %v", want, got)
    			}
    			if want, got := tt.want, res; !reflect.DeepEqual(want, got) {
    				t.Fatalf("unexpected VRF:\n- want: %v\n-  got: %v", want, got)
    			}
    		})
    	}
    }
    
    func TestBasicDeleteVRF(t *testing.T) {
    	var tests = []struct {
    		desc       string
    		data       *VRF
    		serverData interface{}
    		status     int
    		errstr     string
    	}{
    		{
    			desc:       "Delete ID 1",
    			data:       testVRF(1),
    			serverData: testVRF(1),
    			status:     0,
    			errstr:     "",
    		},
    		{
    			desc: "Delete not Found",
    			data: testVRF(1),
    			serverData: &struct {
    				Detail string `json:"detail"`
    			}{
    				Detail: "Not found.",
    			},
    			status: http.StatusNotFound,
    			errstr: "404 - Not found.",
    		},
    	}
    
    	for i, tt := range tests {
    		t.Run(fmt.Sprintf("[%d] %s", i, tt.desc), func(t *testing.T) {
    			c, done := testClient(t, testStatusHandler(t, http.MethodDelete, "/api/ipam/vrfs/1/", tt.serverData, tt.status))
    			defer done()
    
    			var terr error
    			if tt.errstr != "" {
    				terr = errors.New(tt.errstr) // Using errstr and initialize real err here, to satisfy golint
    			}
    
    			err := c.IPAM.VRFs.Delete(tt.data)
    			if want, got := terr, err; !reflect.DeepEqual(want, got) {
    				t.Fatalf("unexpected error:\n- want: %v\n-  got: %v", want, got)
    			}
    		})
    	}
    }