@@ -21,6 +21,7 @@ import (
21
21
"fmt"
22
22
"testing"
23
23
24
+ "github.com/IBM-Cloud/power-go-client/power/models"
24
25
"github.com/IBM/go-sdk-core/v5/core"
25
26
"github.com/IBM/platform-services-go-sdk/resourcecontrollerv2"
26
27
"github.com/IBM/vpc-go-sdk/vpcv1"
@@ -30,6 +31,7 @@ import (
30
31
"k8s.io/utils/ptr"
31
32
32
33
infrav1beta2 "sigs.k8s.io/cluster-api-provider-ibmcloud/api/v1beta2"
34
+ mockP "sigs.k8s.io/cluster-api-provider-ibmcloud/pkg/cloud/services/powervs/mock"
33
35
capiv1beta1 "sigs.k8s.io/cluster-api/api/v1beta1"
34
36
35
37
"sigs.k8s.io/cluster-api-provider-ibmcloud/cmd/capibmadm/utils"
@@ -1704,3 +1706,326 @@ func TestCreateServiceInstance(t *testing.T) {
1704
1706
g .Expect (err ).To (BeNil ())
1705
1707
})
1706
1708
}
1709
+
1710
+ func TestIsDHCPServerActive (t * testing.T ) {
1711
+ var (
1712
+ mockPowerVS * mockP.MockPowerVS
1713
+ mockCtrl * gomock.Controller
1714
+ )
1715
+
1716
+ setup := func (t * testing.T ) {
1717
+ t .Helper ()
1718
+ mockCtrl = gomock .NewController (t )
1719
+ mockPowerVS = mockP .NewMockPowerVS (mockCtrl )
1720
+ }
1721
+ teardown := func () {
1722
+ mockCtrl .Finish ()
1723
+ }
1724
+
1725
+ t .Run ("When GetDHCPServer returns error" , func (t * testing.T ) {
1726
+ g := NewWithT (t )
1727
+ setup (t )
1728
+ t .Cleanup (teardown )
1729
+ clusterScope := PowerVSClusterScope {
1730
+ IBMPowerVSClient : mockPowerVS ,
1731
+ IBMPowerVSCluster : & infrav1beta2.IBMPowerVSCluster {Status : infrav1beta2.IBMPowerVSClusterStatus {DHCPServer : & infrav1beta2.ResourceReference {ID : ptr .To ("dhcpID" )}}},
1732
+ }
1733
+ mockPowerVS .EXPECT ().GetDHCPServer (gomock .Any ()).Return (nil , fmt .Errorf ("GetDHCPServer returns error" ))
1734
+ isActive , err := clusterScope .isDHCPServerActive ()
1735
+ g .Expect (err ).ToNot (BeNil ())
1736
+ g .Expect (isActive ).To (BeFalse ())
1737
+ })
1738
+ t .Run ("When checkDHCPServerStatus returns error state" , func (t * testing.T ) {
1739
+ g := NewWithT (t )
1740
+ setup (t )
1741
+ t .Cleanup (teardown )
1742
+
1743
+ dhcpServer := & models.DHCPServerDetail {ID : ptr .To ("dhcpID" ), Status : ptr .To (string (infrav1beta2 .DHCPServerStateError ))}
1744
+ clusterScope := PowerVSClusterScope {
1745
+ IBMPowerVSClient : mockPowerVS ,
1746
+ IBMPowerVSCluster : & infrav1beta2.IBMPowerVSCluster {Status : infrav1beta2.IBMPowerVSClusterStatus {DHCPServer : & infrav1beta2.ResourceReference {ID : ptr .To ("dhcpID" )}}},
1747
+ }
1748
+ mockPowerVS .EXPECT ().GetDHCPServer (gomock .Any ()).Return (dhcpServer , nil )
1749
+
1750
+ isActive , err := clusterScope .isDHCPServerActive ()
1751
+ g .Expect (err ).ToNot (BeNil ())
1752
+ g .Expect (isActive ).To (BeFalse ())
1753
+ })
1754
+ t .Run ("When checkDHCPServerStatus returns active state" , func (t * testing.T ) {
1755
+ g := NewWithT (t )
1756
+ setup (t )
1757
+ t .Cleanup (teardown )
1758
+
1759
+ dhcpServer := & models.DHCPServerDetail {ID : ptr .To ("dhcpID" ), Status : ptr .To (string (infrav1beta2 .DHCPServerStateActive ))}
1760
+ clusterScope := PowerVSClusterScope {
1761
+ IBMPowerVSClient : mockPowerVS ,
1762
+ IBMPowerVSCluster : & infrav1beta2.IBMPowerVSCluster {Status : infrav1beta2.IBMPowerVSClusterStatus {DHCPServer : & infrav1beta2.ResourceReference {ID : ptr .To ("dhcpID" )}}},
1763
+ }
1764
+ mockPowerVS .EXPECT ().GetDHCPServer (gomock .Any ()).Return (dhcpServer , nil )
1765
+
1766
+ isActive , err := clusterScope .isDHCPServerActive ()
1767
+ g .Expect (err ).To (BeNil ())
1768
+ g .Expect (isActive ).To (BeTrue ())
1769
+ })
1770
+ }
1771
+
1772
+ func TestCheckDHCPServerStatus (t * testing.T ) {
1773
+ testCases := []struct {
1774
+ name string
1775
+ dhcpServer models.DHCPServerDetail
1776
+ expectedStatus bool
1777
+ }{
1778
+ {
1779
+ name : "DHCP server is in build state" ,
1780
+ dhcpServer : models.DHCPServerDetail {ID : ptr .To ("dhcpIDBuild" ), Status : ptr .To (string (infrav1beta2 .DHCPServerStateBuild ))},
1781
+ expectedStatus : false ,
1782
+ },
1783
+ {
1784
+ name : "DHCP server is in active state" ,
1785
+ dhcpServer : models.DHCPServerDetail {ID : ptr .To ("dhcpIDActive" ), Status : ptr .To (string (infrav1beta2 .DHCPServerStateActive ))},
1786
+ expectedStatus : true ,
1787
+ },
1788
+ {
1789
+ name : "DHCP server is in error state" ,
1790
+ dhcpServer : models.DHCPServerDetail {ID : ptr .To ("dhcpIDError" ), Status : ptr .To (string (infrav1beta2 .DHCPServerStateError ))},
1791
+ expectedStatus : false ,
1792
+ },
1793
+ {
1794
+ name : "DHCP server is in invalid state" ,
1795
+ dhcpServer : models.DHCPServerDetail {ID : ptr .To ("dhcpIDError" ), Status : ptr .To ("InvalidState" )},
1796
+ expectedStatus : false ,
1797
+ },
1798
+ }
1799
+ for _ , tc := range testCases {
1800
+ g := NewWithT (t )
1801
+ clusterScope := PowerVSClusterScope {}
1802
+ t .Run (tc .name , func (_ * testing.T ) {
1803
+ status , _ := clusterScope .checkDHCPServerStatus (tc .dhcpServer )
1804
+ g .Expect (status ).To (Equal (tc .expectedStatus ))
1805
+ })
1806
+ }
1807
+ }
1808
+
1809
+ func TestCreateDHCPServer (t * testing.T ) {
1810
+ var (
1811
+ mockPowerVS * mockP.MockPowerVS
1812
+ mockCtrl * gomock.Controller
1813
+ clusterName = "clusterName"
1814
+ )
1815
+
1816
+ setup := func (t * testing.T ) {
1817
+ t .Helper ()
1818
+ mockCtrl = gomock .NewController (t )
1819
+ mockPowerVS = mockP .NewMockPowerVS (mockCtrl )
1820
+ }
1821
+ teardown := func () {
1822
+ mockCtrl .Finish ()
1823
+ }
1824
+
1825
+ t .Run ("When dhcpServerDetails is empty" , func (t * testing.T ) {
1826
+ g := NewWithT (t )
1827
+ setup (t )
1828
+ t .Cleanup (teardown )
1829
+
1830
+ dhcpNetwork := & models.DHCPServerNetwork {ID : ptr .To ("dhcpNetworkID" )}
1831
+ dhcpServer := & models.DHCPServer {ID : ptr .To ("dhcpID" ), Network : dhcpNetwork }
1832
+ clusterScope := PowerVSClusterScope {
1833
+ IBMPowerVSClient : mockPowerVS ,
1834
+ IBMPowerVSCluster : & infrav1beta2.IBMPowerVSCluster {ObjectMeta : metav1.ObjectMeta {Name : clusterName }},
1835
+ }
1836
+ mockPowerVS .EXPECT ().CreateDHCPServer (gomock .Any ()).Return (dhcpServer , nil )
1837
+ dhcpID , err := clusterScope .createDHCPServer ()
1838
+ g .Expect (dhcpID ).To (Equal (dhcpServer .ID ))
1839
+ g .Expect (err ).To (BeNil ())
1840
+ g .Expect (clusterScope .IBMPowerVSCluster .Status .Network .ID ).To (Equal (dhcpNetwork .ID ))
1841
+ })
1842
+
1843
+ t .Run ("When dhcpServerDetails are all set but createDHCPServer returns server with no network" , func (t * testing.T ) {
1844
+ g := NewWithT (t )
1845
+ setup (t )
1846
+ t .Cleanup (teardown )
1847
+
1848
+ dhcpServer := & models.DHCPServer {ID : ptr .To ("dhcpID" )}
1849
+ clusterScope := PowerVSClusterScope {
1850
+ IBMPowerVSClient : mockPowerVS ,
1851
+ IBMPowerVSCluster : & infrav1beta2.IBMPowerVSCluster {
1852
+ ObjectMeta : metav1.ObjectMeta {Name : clusterName },
1853
+ Spec : infrav1beta2.IBMPowerVSClusterSpec {DHCPServer : & infrav1beta2.DHCPServer {
1854
+ ID : ptr .To ("dhcpID" ),
1855
+ DNSServer : ptr .To ("DNSServer" ),
1856
+ Cidr : ptr .To ("10.10.1.10/24" ),
1857
+ Snat : ptr .To (true ),
1858
+ }},
1859
+ },
1860
+ }
1861
+ mockPowerVS .EXPECT ().CreateDHCPServer (gomock .Any ()).Return (dhcpServer , nil )
1862
+ dhcpID , err := clusterScope .createDHCPServer ()
1863
+ g .Expect (dhcpID ).To (BeNil ())
1864
+ g .Expect (err ).ToNot (BeNil ())
1865
+ })
1866
+
1867
+ t .Run ("When dhcpServerDetails has no dnsserver,cidr or snat set" , func (t * testing.T ) {
1868
+ g := NewWithT (t )
1869
+ setup (t )
1870
+ t .Cleanup (teardown )
1871
+
1872
+ dhcpNetwork := & models.DHCPServerNetwork {ID : ptr .To ("dhcpNetworkID" )}
1873
+ dhcpServer := & models.DHCPServer {ID : ptr .To ("dhcpID" ), Network : dhcpNetwork }
1874
+ clusterScope := PowerVSClusterScope {
1875
+ IBMPowerVSClient : mockPowerVS ,
1876
+ IBMPowerVSCluster : & infrav1beta2.IBMPowerVSCluster {ObjectMeta : metav1.ObjectMeta {Name : clusterName }},
1877
+ }
1878
+ mockPowerVS .EXPECT ().CreateDHCPServer (gomock .Any ()).Return (dhcpServer , nil )
1879
+ dhcpID , err := clusterScope .createDHCPServer ()
1880
+ g .Expect (dhcpID ).To (Equal (dhcpServer .ID ))
1881
+ g .Expect (err ).To (BeNil ())
1882
+ g .Expect (clusterScope .IBMPowerVSCluster .Status .Network .ID ).To (Equal (dhcpNetwork .ID ))
1883
+ })
1884
+
1885
+ t .Run ("When CreateDHCPServer returns empty dhcp server" , func (t * testing.T ) {
1886
+ g := NewWithT (t )
1887
+ setup (t )
1888
+ t .Cleanup (teardown )
1889
+
1890
+ clusterScope := PowerVSClusterScope {
1891
+ IBMPowerVSClient : mockPowerVS ,
1892
+ IBMPowerVSCluster : & infrav1beta2.IBMPowerVSCluster {ObjectMeta : metav1.ObjectMeta {Name : clusterName }},
1893
+ }
1894
+ mockPowerVS .EXPECT ().CreateDHCPServer (gomock .Any ()).Return (nil , nil )
1895
+ dhcpID , err := clusterScope .createDHCPServer ()
1896
+ g .Expect (dhcpID ).To (BeNil ())
1897
+ g .Expect (err ).ToNot (BeNil ())
1898
+ })
1899
+
1900
+ t .Run ("When CreateDHCPServer returns error" , func (t * testing.T ) {
1901
+ g := NewWithT (t )
1902
+ setup (t )
1903
+ t .Cleanup (teardown )
1904
+
1905
+ clusterScope := PowerVSClusterScope {
1906
+ IBMPowerVSClient : mockPowerVS ,
1907
+ IBMPowerVSCluster : & infrav1beta2.IBMPowerVSCluster {ObjectMeta : metav1.ObjectMeta {Name : clusterName }},
1908
+ }
1909
+ mockPowerVS .EXPECT ().CreateDHCPServer (gomock .Any ()).Return (nil , fmt .Errorf ("CreateDHCPServer returns error" ))
1910
+ dhcpID , err := clusterScope .createDHCPServer ()
1911
+ g .Expect (dhcpID ).To (BeNil ())
1912
+ g .Expect (err ).ToNot (BeNil ())
1913
+ })
1914
+ }
1915
+
1916
+ func TestReconcileNetwork (t * testing.T ) {
1917
+ var (
1918
+ mockPowerVS * mockP.MockPowerVS
1919
+ mockCtrl * gomock.Controller
1920
+ )
1921
+
1922
+ setup := func (t * testing.T ) {
1923
+ t .Helper ()
1924
+ mockCtrl = gomock .NewController (t )
1925
+ mockPowerVS = mockP .NewMockPowerVS (mockCtrl )
1926
+ }
1927
+ teardown := func () {
1928
+ mockCtrl .Finish ()
1929
+ }
1930
+ t .Run ("When GetDHCPServer returns error" , func (t * testing.T ) {
1931
+ g := NewWithT (t )
1932
+ setup (t )
1933
+ t .Cleanup (teardown )
1934
+
1935
+ clusterScope := PowerVSClusterScope {
1936
+ IBMPowerVSClient : mockPowerVS ,
1937
+ IBMPowerVSCluster : & infrav1beta2.IBMPowerVSCluster {Status : infrav1beta2.IBMPowerVSClusterStatus {DHCPServer : & infrav1beta2.ResourceReference {ID : ptr .To ("dhcpID" )}}},
1938
+ }
1939
+ mockPowerVS .EXPECT ().GetDHCPServer (gomock .Any ()).Return (nil , fmt .Errorf ("GetDHCPServer error" ))
1940
+
1941
+ requeue , err := clusterScope .ReconcileNetwork ()
1942
+ g .Expect (err ).ToNot (BeNil ())
1943
+ g .Expect (requeue ).To (BeFalse ())
1944
+ })
1945
+ t .Run ("When DHCPServer exists and is active" , func (t * testing.T ) {
1946
+ g := NewWithT (t )
1947
+ setup (t )
1948
+ t .Cleanup (teardown )
1949
+
1950
+ clusterScope := PowerVSClusterScope {
1951
+ IBMPowerVSClient : mockPowerVS ,
1952
+ IBMPowerVSCluster : & infrav1beta2.IBMPowerVSCluster {Status : infrav1beta2.IBMPowerVSClusterStatus {DHCPServer : & infrav1beta2.ResourceReference {ID : ptr .To ("dhcpID" )}}},
1953
+ }
1954
+
1955
+ dhcpServer := & models.DHCPServerDetail {ID : ptr .To ("dhcpID" ), Status : ptr .To (string (infrav1beta2 .DHCPServerStateActive ))}
1956
+ mockPowerVS .EXPECT ().GetDHCPServer (gomock .Any ()).Return (dhcpServer , nil )
1957
+
1958
+ requeue , err := clusterScope .ReconcileNetwork ()
1959
+ g .Expect (err ).To (BeNil ())
1960
+ g .Expect (requeue ).To (BeTrue ())
1961
+ })
1962
+ t .Run ("When DHCPID is empty and GetNetworkByID returns error " , func (t * testing.T ) {
1963
+ g := NewWithT (t )
1964
+ setup (t )
1965
+ t .Cleanup (teardown )
1966
+
1967
+ clusterScope := PowerVSClusterScope {
1968
+ IBMPowerVSClient : mockPowerVS ,
1969
+ IBMPowerVSCluster : & infrav1beta2.IBMPowerVSCluster {Spec : infrav1beta2.IBMPowerVSClusterSpec {
1970
+ Network : infrav1beta2.IBMPowerVSResourceReference {ID : ptr .To ("networkID" )}}},
1971
+ }
1972
+ network := & models.Network {}
1973
+ mockPowerVS .EXPECT ().GetNetworkByID (gomock .Any ()).Return (network , fmt .Errorf ("GetNetworkByID error" ))
1974
+
1975
+ requeue , err := clusterScope .ReconcileNetwork ()
1976
+ g .Expect (err ).ToNot (BeNil ())
1977
+ g .Expect (requeue ).To (BeFalse ())
1978
+ })
1979
+ t .Run ("When DHCPID is empty and networkID is not empty" , func (t * testing.T ) {
1980
+ g := NewWithT (t )
1981
+ setup (t )
1982
+ t .Cleanup (teardown )
1983
+ network := & models.Network {NetworkID : ptr .To ("networkID" )}
1984
+ clusterScope := PowerVSClusterScope {
1985
+ IBMPowerVSClient : mockPowerVS ,
1986
+ IBMPowerVSCluster : & infrav1beta2.IBMPowerVSCluster {Spec : infrav1beta2.IBMPowerVSClusterSpec {
1987
+ Network : infrav1beta2.IBMPowerVSResourceReference {ID : ptr .To ("networkID" )}}},
1988
+ }
1989
+ mockPowerVS .EXPECT ().GetNetworkByID (gomock .Any ()).Return (network , nil )
1990
+ requeue , err := clusterScope .ReconcileNetwork ()
1991
+ g .Expect (clusterScope .IBMPowerVSCluster .Status .Network .ID ).To (Equal (network .NetworkID ))
1992
+ g .Expect (err ).To (BeNil ())
1993
+ g .Expect (requeue ).To (BeTrue ())
1994
+ })
1995
+ t .Run ("When DHCPID is empty and checkNetwork returns empty network ID" , func (t * testing.T ) {
1996
+ g := NewWithT (t )
1997
+ setup (t )
1998
+ t .Cleanup (teardown )
1999
+
2000
+ dhcpNetwork := & models.DHCPServerNetwork {ID : ptr .To ("dhcpNetworkID" )}
2001
+ dhcpServer := & models.DHCPServer {ID : ptr .To ("dhcpID" ), Network : dhcpNetwork }
2002
+ clusterScope := PowerVSClusterScope {
2003
+ IBMPowerVSClient : mockPowerVS ,
2004
+ IBMPowerVSCluster : & infrav1beta2.IBMPowerVSCluster {Spec : infrav1beta2.IBMPowerVSClusterSpec {
2005
+ Network : infrav1beta2.IBMPowerVSResourceReference {Name : ptr .To ("networkName" )}}},
2006
+ }
2007
+ mockPowerVS .EXPECT ().GetNetworkByName (gomock .Any ()).Return (nil , nil )
2008
+ mockPowerVS .EXPECT ().CreateDHCPServer (gomock .Any ()).Return (dhcpServer , nil )
2009
+ requeue , err := clusterScope .ReconcileNetwork ()
2010
+ g .Expect (clusterScope .IBMPowerVSCluster .Status .DHCPServer .ID ).To (Equal (dhcpServer .ID ))
2011
+ g .Expect (clusterScope .IBMPowerVSCluster .Status .Network .ID ).To (Equal (dhcpNetwork .ID ))
2012
+ g .Expect (err ).To (BeNil ())
2013
+ g .Expect (requeue ).To (BeFalse ())
2014
+ })
2015
+ t .Run ("When DHCPID and networkID is not empty and createDHCPServer returns error" , func (t * testing.T ) {
2016
+ g := NewWithT (t )
2017
+ setup (t )
2018
+ t .Cleanup (teardown )
2019
+
2020
+ clusterScope := PowerVSClusterScope {
2021
+ IBMPowerVSClient : mockPowerVS ,
2022
+ IBMPowerVSCluster : & infrav1beta2.IBMPowerVSCluster {Spec : infrav1beta2.IBMPowerVSClusterSpec {
2023
+ Network : infrav1beta2.IBMPowerVSResourceReference {Name : ptr .To ("networkName" )}}},
2024
+ }
2025
+ mockPowerVS .EXPECT ().GetNetworkByName (gomock .Any ()).Return (nil , nil )
2026
+ mockPowerVS .EXPECT ().CreateDHCPServer (gomock .Any ()).Return (nil , fmt .Errorf ("CreateDHCPServer error" ))
2027
+ requeue , err := clusterScope .ReconcileNetwork ()
2028
+ g .Expect (err ).ToNot (BeNil ())
2029
+ g .Expect (requeue ).To (BeFalse ())
2030
+ })
2031
+ }
0 commit comments