diff --git a/client_nic_create_test.go b/client_nic_create_test.go index 768c49b..78bc187 100644 --- a/client_nic_create_test.go +++ b/client_nic_create_test.go @@ -29,10 +29,10 @@ func TestVMNICCreation(t *testing.T) { assertNICCount(t, vm, 0) } -func TestDuplicateVMNICCreation(t *testing.T) { +func TestDuplicateVMNICCreationWithSameName(t *testing.T) { t.Parallel() helper := getHelper(t) - nicName := "test_duplicate_name" + nickName := fmt.Sprintf("duplicate_nic_%s", helper.GenerateRandomID(5)) vm := assertCanCreateVM( t, @@ -45,16 +45,45 @@ func TestDuplicateVMNICCreation(t *testing.T) { t, helper, vm, - nicName, + nickName, ovirtclient.CreateNICParams()) assertNICCount(t, vm, 1) - assertCannotCreateNIC( + assertCannotCreateNICWithSameName( t, helper, vm, - nicName, + nickName, ovirtclient.CreateNICParams()) assertNICCount(t, vm, 1) assertCanRemoveNIC(t, nic1) assertNICCount(t, vm, 0) } + +func TestDuplicateVMNICCreationWithSameNameDiffVNICProfileSameNetwork(t *testing.T) { + t.Parallel() + helper := getHelper(t) + nickName := fmt.Sprintf("duplicate_nic_%s", helper.GenerateRandomID(5)) + + vm := assertCanCreateVM( + t, + helper, + fmt.Sprintf("nic_test_%s", helper.GenerateRandomID(5)), + ovirtclient.CreateVMParams(), + ) + assertNICCount(t, vm, 0) + assertCanCreateNIC( + t, + helper, + vm, + nickName, + ovirtclient.CreateNICParams()) + assertNICCount(t, vm, 1) + diffVNICProfileSameNetwork := assertCanCreateVNICProfile(t, helper) + assertCannotCreateNICWithVNICProfile( + t, + vm, + nickName, + diffVNICProfileSameNetwork.ID(), + ovirtclient.ETimeout) + assertNICCount(t, vm, 1) +} diff --git a/client_nic_test.go b/client_nic_test.go index 6e9a9fe..e96348e 100644 --- a/client_nic_test.go +++ b/client_nic_test.go @@ -1,6 +1,7 @@ package ovirtclient_test import ( + "errors" "testing" ovirtclient "github.com/ovirt/go-ovirt-client" @@ -34,19 +35,43 @@ func assertCanCreateNIC( return nic } -func assertCannotCreateNIC( +func assertCannotCreateNICWithSameName( t *testing.T, helper ovirtclient.TestHelper, vm ovirtclient.VM, name string, params ovirtclient.BuildableNICParameters, ) { - nic, _ := vm.CreateNIC(name, helper.GetVNICProfileID(), params) - if nic != nil { + + _, err := vm.CreateNIC(name, helper.GetVNICProfileID(), params) + if err == nil { t.Fatalf("create 2 NICs with same name %s", name) } } +func assertCannotCreateNICWithVNICProfile( + t *testing.T, + vm ovirtclient.VM, + name string, + diffVNICProfile string, + errorCode ovirtclient.ErrorCode) { + _, err := vm.CreateNIC(name, diffVNICProfile, ovirtclient.CreateNICParams()) + if err != nil { + if errorCode == "" { + return + } + var e ovirtclient.EngineError + if !errors.As(err, &e) { + t.Fatalf("Failed to convert returned error to EngineError (%v)", err) + } + if !e.HasCode(errorCode) { + t.Fatalf("Unexpected error code: %s, instead of: %s", e.Code(), errorCode) + } + return + } + t.Fatalf("Unexectedly create 2 NICs with same name %s and different VNICProfile %s", name, diffVNICProfile) +} + func assertCanRemoveNIC(t *testing.T, nic ovirtclient.NIC) { if err := nic.Remove(); err != nil { t.Fatalf("failed to remove NIC %s (%v)", nic.ID(), err) diff --git a/mock_nic_create.go b/mock_nic_create.go index 2239277..0eddd3a 100644 --- a/mock_nic_create.go +++ b/mock_nic_create.go @@ -21,11 +21,10 @@ func (m *mockClient) CreateNIC( return nil, newError(ENotFound, "VM with ID %s not found for NIC creation", vmid) } for _, n := range m.nics { - if n.name == name { - return nil, newError(ENotFound, "NIC with name %s is already in use", name) + if n.name == name && m.vnicProfiles[n.vnicProfileID].networkID == m.vnicProfiles[vnicProfileID].networkID { + return nil, newError(ETimeout, "NIC with same name %s is already in use", name) } } - id := uuid.Must(uuid.NewUUID()).String() nic := &nic{