@@ -23,6 +23,7 @@ import (
2323
2424 "github.com/compose-spec/compose-go/v2/types"
2525 "github.com/moby/moby/api/types/container"
26+ "github.com/moby/moby/api/types/network"
2627 "github.com/moby/moby/client"
2728 "go.uber.org/mock/gomock"
2829 "gotest.tools/v3/assert"
@@ -38,6 +39,15 @@ func (noopEventProcessor) Start(_ context.Context, _ string) {}
3839func (noopEventProcessor ) On (_ ... api.Resource ) {}
3940func (noopEventProcessor ) Done (_ string , _ bool ) {}
4041
42+ const (
43+ ipamOptionsProjectName = "test"
44+ ipamOptionsNetworkKey = "default"
45+ ipamOptionsNetworkName = "test_default"
46+ ipamOptionsKey = "test"
47+ ipamOptionsValue = "1"
48+ ipamOptionsCreatedNetID = "net1"
49+ )
50+
4151func newTestService (t * testing.T ) (* composeService , * mocks.MockAPIClient ) {
4252 t .Helper ()
4353 mockCtrl := gomock .NewController (t )
@@ -86,6 +96,49 @@ func TestExecutePlanCreateNetwork(t *testing.T) {
8696 assert .NilError (t , err )
8797}
8898
99+ func TestExecutePlanCreateNetworkWithIPAMOptions (t * testing.T ) {
100+ svc , apiClient := newTestService (t )
101+
102+ nw := types.NetworkConfig {
103+ Name : ipamOptionsNetworkName ,
104+ Ipam : types.IPAMConfig {
105+ Options : types.Options {
106+ ipamOptionsKey : ipamOptionsValue ,
107+ },
108+ },
109+ }
110+ project := & types.Project {
111+ Name : ipamOptionsProjectName ,
112+ Networks : types.Networks {ipamOptionsNetworkKey : nw },
113+ }
114+
115+ apiClient .EXPECT ().NetworkInspect (gomock .Any (), ipamOptionsNetworkName , gomock .Any ()).
116+ Return (client.NetworkInspectResult {}, notFoundError {})
117+ apiClient .EXPECT ().NetworkList (gomock .Any (), gomock .Any ()).
118+ Return (client.NetworkListResult {}, nil )
119+ apiClient .EXPECT ().NetworkCreate (gomock .Any (), ipamOptionsNetworkName , gomock .Any ()).
120+ DoAndReturn (func (_ context.Context , _ string , opts client.NetworkCreateOptions ) (client.NetworkCreateResult , error ) {
121+ assert .DeepEqual (t , opts .IPAM , & network.IPAM {
122+ Options : map [string ]string {
123+ ipamOptionsKey : ipamOptionsValue ,
124+ },
125+ })
126+ return client.NetworkCreateResult {ID : ipamOptionsCreatedNetID }, nil
127+ })
128+
129+ plan := & Plan {}
130+ plan .addNode (Operation {
131+ Type : OpCreateNetwork ,
132+ ResourceID : "network:" + ipamOptionsNetworkKey ,
133+ Cause : "not found" ,
134+ Name : nw .Name ,
135+ Network : & nw ,
136+ }, "" )
137+
138+ err := svc .executePlan (t .Context (), project , emptyObservedState (ipamOptionsProjectName ), plan )
139+ assert .NilError (t , err )
140+ }
141+
89142func TestExecutePlanStopRemoveContainer (t * testing.T ) {
90143 svc , apiClient := newTestService (t )
91144
0 commit comments