2222import static org .junit .Assert .assertTrue ;
2323import static org .mockito .ArgumentMatchers .any ;
2424import static org .mockito .ArgumentMatchers .eq ;
25+ import static org .mockito .Mockito .lenient ;
2526import static org .mockito .Mockito .mock ;
2627import static org .mockito .Mockito .never ;
2728import static org .mockito .Mockito .times ;
@@ -283,10 +284,20 @@ public void sendPostMigrationVlanTrunkMembershipIfNeededWarnsOnSendException() t
283284 // -- getVlanFilteringUnsuitableReason --
284285
285286 private NicVO nicOnVlan (int vlan , boolean multiNetwork ) {
287+ return nicOnVlan (vlan , multiNetwork , Networks .TrafficType .Guest );
288+ }
289+
290+ private NicVO nicOnVlan (int vlan , boolean multiNetwork , Networks .TrafficType trafficType ) {
286291 URI broadcastUri = Networks .BroadcastDomainType .Vlan .toUri (vlan );
287292 NicVO nic = mock (NicVO .class );
288293 when (nic .getBroadcastUri ()).thenReturn (broadcastUri );
289294 when (nic .getMultiNetwork ()).thenReturn (multiNetwork );
295+ if (!multiNetwork ) {
296+ lenient ().when (nic .getNetworkId ()).thenReturn (5L );
297+ NetworkVO network = mock (NetworkVO .class );
298+ lenient ().when (network .getTrafficType ()).thenReturn (trafficType );
299+ lenient ().when (networkDao .findById (5L )).thenReturn (network );
300+ }
290301 return nic ;
291302 }
292303
@@ -340,6 +351,7 @@ public void getVlanFilteringUnsuitableReasonUsesNetworkVlanForStoppedNicWithoutB
340351 NetworkVO network = mock (NetworkVO .class );
341352 URI vlanOne = Networks .BroadcastDomainType .Vlan .toUri (1 );
342353 when (network .getBroadcastUri ()).thenReturn (vlanOne );
354+ when (network .getTrafficType ()).thenReturn (Networks .TrafficType .Guest );
343355 when (networkDao .findById (5L )).thenReturn (network );
344356 givenHostVlanFiltering (true );
345357
@@ -351,10 +363,62 @@ public void getNativeVlanUnsuitableReasonRejectsVlanOneNetworkOnFilteringHostOnl
351363 Network network = mock (Network .class );
352364 URI vlanOne = Networks .BroadcastDomainType .Vlan .toUri (1 );
353365 when (network .getBroadcastUri ()).thenReturn (vlanOne );
366+ when (network .getTrafficType ()).thenReturn (Networks .TrafficType .Guest );
354367 givenHostVlanFiltering (true );
355368 assertTrue (VlanTrunkMigrationHelper .getNativeVlanUnsuitableReason (network , DEST_HOST_ID , hostDetailsDao ).contains ("VLAN 1" ));
356369
357370 givenHostVlanFiltering (false );
358371 assertNull (VlanTrunkMigrationHelper .getNativeVlanUnsuitableReason (network , DEST_HOST_ID , hostDetailsDao ));
359372 }
373+
374+ @ Test
375+ public void getVlanFilteringUnsuitableReasonIgnoresVlanOnePublicNic () {
376+ List <NicVO > nics = Collections .singletonList (nicOnVlan (1 , false , Networks .TrafficType .Public ));
377+ when (nicDao .listByVmId (VM_ID )).thenReturn (nics );
378+
379+ assertNull (VlanTrunkMigrationHelper .getVlanFilteringUnsuitableReason (VM_ID , DEST_HOST_ID , nicDao , networkDao , hostDetailsDao ));
380+ }
381+
382+ @ Test
383+ public void getNativeVlanUnsuitableReasonIgnoresVlanOneNonGuestNetwork () {
384+ Network network = mock (Network .class );
385+ when (network .getTrafficType ()).thenReturn (Networks .TrafficType .Public );
386+
387+ assertNull (VlanTrunkMigrationHelper .getNativeVlanUnsuitableReason (network , DEST_HOST_ID , hostDetailsDao ));
388+ }
389+
390+ @ Test
391+ public void hasNativeVlanGuestNicIsTrueOnlyForGuestVlanOne () {
392+ assertTrue (VlanTrunkMigrationHelper .hasNativeVlanGuestNic (Collections .singletonList (nicOnVlan (1 , false )), networkDao ));
393+ assertFalse (VlanTrunkMigrationHelper .hasNativeVlanGuestNic (Collections .singletonList (nicOnVlan (100 , false )), networkDao ));
394+ }
395+
396+ @ Test
397+ public void isNativeVlanGuestNetworkIsTrueOnlyForGuestVlanOne () {
398+ Network guestVlanOne = mock (Network .class );
399+ when (guestVlanOne .getTrafficType ()).thenReturn (Networks .TrafficType .Guest );
400+ when (guestVlanOne .getBroadcastUri ()).thenReturn (Networks .BroadcastDomainType .Vlan .toUri (1 ));
401+ Network guestOtherVlan = mock (Network .class );
402+ when (guestOtherVlan .getTrafficType ()).thenReturn (Networks .TrafficType .Guest );
403+ when (guestOtherVlan .getBroadcastUri ()).thenReturn (Networks .BroadcastDomainType .Vlan .toUri (100 ));
404+
405+ assertTrue (VlanTrunkMigrationHelper .isNativeVlanGuestNetwork (guestVlanOne ));
406+ assertFalse (VlanTrunkMigrationHelper .isNativeVlanGuestNetwork (guestOtherVlan ));
407+ }
408+
409+ @ Test
410+ public void hasTrunkNicDetectsMultiNetworkNic () {
411+ assertTrue (VlanTrunkMigrationHelper .hasTrunkNic (Collections .singletonList (nicOnVlan (100 , true ))));
412+ assertFalse (VlanTrunkMigrationHelper .hasTrunkNic (Collections .singletonList (nicOnVlan (100 , false ))));
413+ }
414+
415+ @ Test
416+ public void getVlanFilteringUnsuitableReasonDoesNotLookUpNetworksOrHostForNicsOnOtherVlans () {
417+ List <NicVO > nics = Collections .singletonList (nicOnVlan (100 , false ));
418+ when (nicDao .listByVmId (VM_ID )).thenReturn (nics );
419+
420+ assertNull (VlanTrunkMigrationHelper .getVlanFilteringUnsuitableReason (VM_ID , DEST_HOST_ID , nicDao , networkDao , hostDetailsDao ));
421+ verify (networkDao , never ()).findById (any (Long .class ));
422+ verify (hostDetailsDao , never ()).findDetail (any (Long .class ), any (String .class ));
423+ }
360424}
0 commit comments