|
26 | 26 | import java.text.SimpleDateFormat; |
27 | 27 | import java.util.ArrayList; |
28 | 28 | import java.util.Arrays; |
| 29 | +import java.util.Collections; |
29 | 30 | import java.util.Date; |
30 | 31 | import java.util.HashMap; |
31 | 32 | import java.util.List; |
|
38 | 39 | import com.cloud.utils.DateUtil; |
39 | 40 | import com.google.gson.JsonSyntaxException; |
40 | 41 | import org.apache.cloudstack.framework.config.ConfigKey; |
| 42 | +import org.apache.cloudstack.network.RoutedIpv4Manager; |
41 | 43 | import org.apache.cloudstack.storage.datastore.db.StoragePoolVO; |
42 | 44 | import org.apache.commons.collections.CollectionUtils; |
43 | 45 | import org.influxdb.InfluxDB; |
|
64 | 66 | import com.cloud.agent.api.GetStorageStatsCommand; |
65 | 67 | import com.cloud.agent.api.VmDiskStatsEntry; |
66 | 68 | import com.cloud.agent.api.VmStatsEntry; |
| 69 | +import com.cloud.dc.Vlan.VlanType; |
| 70 | +import com.cloud.dc.VlanVO; |
| 71 | +import com.cloud.dc.dao.VlanDao; |
67 | 72 | import com.cloud.hypervisor.Hypervisor; |
| 73 | +import com.cloud.network.dao.NetworkDao; |
| 74 | +import com.cloud.network.dao.NetworkVO; |
68 | 75 | import com.cloud.server.StatsCollector.ExternalStatsProtocol; |
69 | 76 | import com.cloud.storage.StorageStats; |
70 | 77 | import com.cloud.storage.VolumeStatsVO; |
@@ -118,6 +125,15 @@ public class StatsCollectorTest { |
118 | 125 | @Mock |
119 | 126 | private StoragePoolVO mockPool; |
120 | 127 |
|
| 128 | + @Mock |
| 129 | + private RoutedIpv4Manager routedIpv4Manager; |
| 130 | + |
| 131 | + @Mock |
| 132 | + private NetworkDao networkDao; |
| 133 | + |
| 134 | + @Mock |
| 135 | + private VlanDao vlanDao; |
| 136 | + |
121 | 137 | private static Gson gson = new Gson(); |
122 | 138 |
|
123 | 139 | private Gson msStatsGson; |
@@ -701,6 +717,78 @@ public void testGsonDateFormatDeserializationWithDifferentDateFormat() throws Ex |
701 | 717 | */ |
702 | 718 | } |
703 | 719 |
|
| 720 | + // ----------------------------------------------------------------------- |
| 721 | + // Tests for isNetworkEligibleForNetworkStats |
| 722 | + // ----------------------------------------------------------------------- |
| 723 | + |
| 724 | + private VlanVO buildVlan(VlanType type) { |
| 725 | + VlanVO vlan = Mockito.mock(VlanVO.class); |
| 726 | + Mockito.when(vlan.getVlanType()).thenReturn(type); |
| 727 | + return vlan; |
| 728 | + } |
| 729 | + |
| 730 | + @Test |
| 731 | + public void isNetworkEligibleForNetworkStats_RoutedNetwork_ReturnsTrue() { |
| 732 | + Long networkId = 1L; |
| 733 | + NetworkVO networkVO = Mockito.mock(NetworkVO.class); |
| 734 | + Mockito.when(networkDao.findById(networkId)).thenReturn(networkVO); |
| 735 | + Mockito.when(vlanDao.listVlansByNetworkId(networkId)).thenReturn(Collections.emptyList()); |
| 736 | + Mockito.when(routedIpv4Manager.isRoutedNetwork(networkVO)).thenReturn(true); |
| 737 | + |
| 738 | + Assert.assertTrue(statsCollector.isNetworkEligibleForNetworkStats(networkId)); |
| 739 | + } |
| 740 | + |
| 741 | + @Test |
| 742 | + public void isNetworkEligibleForNetworkStats_DirectAttachedNetwork_ReturnsTrue() { |
| 743 | + Long networkId = 1L; |
| 744 | + NetworkVO networkVO = Mockito.mock(NetworkVO.class); |
| 745 | + Mockito.when(networkDao.findById(networkId)).thenReturn(networkVO); |
| 746 | + Mockito.when(routedIpv4Manager.isRoutedNetwork(networkVO)).thenReturn(false); |
| 747 | + List<VlanVO> vlans = Collections.singletonList(buildVlan(VlanType.DirectAttached)); |
| 748 | + Mockito.when(vlanDao.listVlansByNetworkId(networkId)).thenReturn(vlans); |
| 749 | + |
| 750 | + Assert.assertTrue(statsCollector.isNetworkEligibleForNetworkStats(networkId)); |
| 751 | + } |
| 752 | + |
| 753 | + @Test |
| 754 | + public void isNetworkEligibleForNetworkStats_NeitherRoutedNorDirectAttached_ReturnsFalse() { |
| 755 | + Long networkId = 1L; |
| 756 | + NetworkVO networkVO = Mockito.mock(NetworkVO.class); |
| 757 | + Mockito.when(networkDao.findById(networkId)).thenReturn(networkVO); |
| 758 | + Mockito.when(routedIpv4Manager.isRoutedNetwork(networkVO)).thenReturn(false); |
| 759 | + List<VlanVO> vlans = Collections.singletonList(buildVlan(VlanType.VirtualNetwork)); |
| 760 | + Mockito.when(vlanDao.listVlansByNetworkId(networkId)).thenReturn(vlans); |
| 761 | + |
| 762 | + Assert.assertFalse(statsCollector.isNetworkEligibleForNetworkStats(networkId)); |
| 763 | + } |
| 764 | + |
| 765 | + @Test |
| 766 | + public void isNetworkEligibleForNetworkStats_NullNetworkAndEmptyVlans_ReturnsFalse() { |
| 767 | + Long networkId = 1L; |
| 768 | + Mockito.when(networkDao.findById(networkId)).thenReturn(null); |
| 769 | + Mockito.when(vlanDao.listVlansByNetworkId(networkId)).thenReturn(Collections.emptyList()); |
| 770 | + |
| 771 | + Assert.assertFalse(statsCollector.isNetworkEligibleForNetworkStats(networkId)); |
| 772 | + } |
| 773 | + |
| 774 | + @Test |
| 775 | + public void isNetworkEligibleForNetworkStats_NullNetworkButDirectAttached_ReturnsTrue() { |
| 776 | + Long networkId = 1L; |
| 777 | + Mockito.when(networkDao.findById(networkId)).thenReturn(null); |
| 778 | + List<VlanVO> vlans = Collections.singletonList(buildVlan(VlanType.DirectAttached)); |
| 779 | + Mockito.when(vlanDao.listVlansByNetworkId(networkId)).thenReturn(vlans); |
| 780 | + |
| 781 | + Assert.assertTrue(statsCollector.isNetworkEligibleForNetworkStats(networkId)); |
| 782 | + Mockito.verify(routedIpv4Manager, Mockito.never()).isRoutedNetwork(Mockito.any()); |
| 783 | + } |
| 784 | + |
| 785 | + @Test |
| 786 | + public void isNetworkEligibleForNetworkStats_NullNetworkId_ReturnsFalse() { |
| 787 | + Assert.assertFalse(statsCollector.isNetworkEligibleForNetworkStats(null)); |
| 788 | + Mockito.verify(networkDao, Mockito.never()).findById(Mockito.anyLong()); |
| 789 | + Mockito.verify(vlanDao, Mockito.never()).listVlansByNetworkId(Mockito.anyLong()); |
| 790 | + } |
| 791 | + |
704 | 792 | private static class TestClass { |
705 | 793 | private String str; |
706 | 794 | private int num; |
|
0 commit comments