@@ -17,6 +17,7 @@ package client
1717import (
1818 "context"
1919 "errors"
20+ "fmt"
2021 errors2 "github.com/pkg/errors"
2122 "log"
2223 "strings"
@@ -98,10 +99,112 @@ func TestNLB_AwaitWorkRequest(t *testing.T) {
9899 }
99100}
100101
102+ var (
103+ fakeNlbOcid1 = "ocid.nlb.fake1"
104+ fakeNlbName1 = "fake display name 1"
105+ fakeNlbOcid2 = "ocid.nlb.fake2"
106+ fakeNlbName2 = "fake display name 2"
107+ fakeSubnetOcid = "ocid.subnet.fake"
108+
109+ NLBMap = map [string ]networkloadbalancer.NetworkLoadBalancer {
110+ "ocid.nlb.fake1" : networkloadbalancer.NetworkLoadBalancer {
111+ Id : & fakeNlbOcid1 ,
112+ DisplayName : & fakeNlbName1 ,
113+ SubnetId : & fakeSubnetOcid ,
114+ },
115+ "ocid.nlb.fake2" : networkloadbalancer.NetworkLoadBalancer {
116+ Id : & fakeNlbOcid2 ,
117+ DisplayName : & fakeNlbName2 ,
118+ SubnetId : & fakeSubnetOcid ,
119+ },
120+ }
121+ )
122+
123+ func TestGetLoadBalancerByName (t * testing.T ) {
124+ var totalListCalls int
125+ var loadbalancer = NewNLBClient (
126+ & MockNetworkLoadBalancerClient {debug : true , listCalls : & totalListCalls },
127+ common.RequestMetadata {},
128+ & RateLimiter {
129+ Reader : flowcontrol .NewFakeAlwaysRateLimiter (),
130+ Writer : flowcontrol .NewFakeAlwaysRateLimiter (),
131+ })
132+
133+ var tests = []struct {
134+ skip bool // set true to skip a test-case
135+ compartment , name , testname string
136+ want string
137+ wantErr error
138+ wantListCalls int
139+ }{
140+ {
141+ testname : "getFirstNLBFirstTime" ,
142+ compartment : "ocid.compartment.fake" ,
143+ name : fakeNlbName1 ,
144+ want : fakeNlbOcid1 ,
145+ wantErr : nil ,
146+ wantListCalls : 1 ,
147+ },
148+ {
149+ testname : "getFirstNLBSecondTime" ,
150+ compartment : "ocid.compartment.fake" ,
151+ name : fakeNlbName1 ,
152+ want : fakeNlbOcid1 ,
153+ wantErr : nil ,
154+ wantListCalls : 1 , // totals, no new list should be performed
155+ },
156+ {
157+ testname : "getSecondNLBTime" ,
158+ compartment : "ocid.compartment.fake" ,
159+ name : fakeNlbName2 ,
160+ want : fakeNlbOcid2 ,
161+ wantErr : nil ,
162+ wantListCalls : 2 ,
163+ },
164+ {
165+ testname : "getFirstNLBThirdTime" ,
166+ compartment : "ocid.compartment.fake" ,
167+ name : fakeNlbName1 ,
168+ want : fakeNlbOcid1 ,
169+ wantErr : nil ,
170+ wantListCalls : 2 ,
171+ },
172+ {
173+ testname : "getSecondNLBSecondTime" ,
174+ compartment : "ocid.compartment.fake" ,
175+ name : fakeNlbName2 ,
176+ want : fakeNlbOcid2 ,
177+ wantErr : nil ,
178+ wantListCalls : 2 ,
179+ },
180+ }
181+
182+ for _ , tt := range tests {
183+ if tt .skip {
184+ continue
185+ }
186+
187+ t .Run (tt .testname , func (t * testing.T ) {
188+ log .Println ("running test " , tt .testname )
189+ got , err := loadbalancer .GetLoadBalancerByName (context .Background (), tt .compartment , tt .name )
190+ if got == nil || * got .Id != tt .want {
191+ t .Errorf ("Expected %v, but got %v" , tt .want , got )
192+ }
193+ if ! errors .Is (err , tt .wantErr ) {
194+ t .Errorf ("Expected error = %v, but got %v" , tt .wantErr , err )
195+ }
196+ if totalListCalls != tt .wantListCalls {
197+ t .Errorf ("Expected the total number of NLB list calls %d, but got %d" , tt .wantListCalls , totalListCalls )
198+ }
199+ })
200+ }
201+ }
202+
101203type MockNetworkLoadBalancerClient struct {
102204 // MockLoadBalancerClient mocks LoadBalancer client implementation.
103- counter int
104- debug bool // set true to run tests with debug logs
205+ counter int
206+ debug bool // set true to run tests with debug logs
207+ listCalls * int // number of list operations performed
105208}
106209
107210type getNetworkLoadBalancerWorkRequestResponse struct {
@@ -173,12 +276,27 @@ func (c *MockNetworkLoadBalancerClient) GetWorkRequest(ctx context.Context, requ
173276}
174277
175278func (c * MockNetworkLoadBalancerClient ) GetNetworkLoadBalancer (ctx context.Context , request networkloadbalancer.GetNetworkLoadBalancerRequest ) (response networkloadbalancer.GetNetworkLoadBalancerResponse , err error ) {
279+ if c .debug {
280+ log .Println (fmt .Sprintf ("Getting NLB %v" , * request .NetworkLoadBalancerId ))
281+ }
282+
283+ response = networkloadbalancer.GetNetworkLoadBalancerResponse {
284+ NetworkLoadBalancer : NLBMap [* request .NetworkLoadBalancerId ],
285+ }
176286 return
177287}
178288func (c * MockNetworkLoadBalancerClient ) ListWorkRequests (ctx context.Context , request networkloadbalancer.ListWorkRequestsRequest ) (response networkloadbalancer.ListWorkRequestsResponse , err error ) {
179289 return
180290}
181291func (c * MockNetworkLoadBalancerClient ) ListNetworkLoadBalancers (ctx context.Context , request networkloadbalancer.ListNetworkLoadBalancersRequest ) (response networkloadbalancer.ListNetworkLoadBalancersResponse , err error ) {
292+ if c .debug {
293+ log .Println (fmt .Sprintf ("Lising NLBs in compartment %v" , * request .CompartmentId ))
294+ }
295+
296+ for _ , nlb := range NLBMap {
297+ response .NetworkLoadBalancerCollection .Items = append (response .NetworkLoadBalancerCollection .Items , networkloadbalancer .NetworkLoadBalancerSummary (nlb ))
298+ }
299+ * c .listCalls += 1
182300 return
183301}
184302func (c * MockNetworkLoadBalancerClient ) CreateNetworkLoadBalancer (ctx context.Context , request networkloadbalancer.CreateNetworkLoadBalancerRequest ) (response networkloadbalancer.CreateNetworkLoadBalancerResponse , err error ) {
0 commit comments