@@ -16,14 +16,16 @@ import (
16
16
17
17
const (
18
18
virtualMachineRootCmd = "vm"
19
- alpineImage = "public.ecr.aws/docker/library/alpine :latest"
19
+ alpineImage = "public.ecr.aws/soci-workshop-examples/node :latest"
20
20
testImageName = "test:tag"
21
21
testContainerName = "ctr-test"
22
22
)
23
23
24
+ // public.ecr.aws/soci-workshop-examples/mongo:latest public.ecr.aws/soci-workshop-examples/redis:latest public.ecr.aws/docker/library/alpine:latest
24
25
// Suite is a struct that groups benchmark functions and shared state.
25
26
type Suite struct {
26
27
subject string
28
+ docker string
27
29
}
28
30
29
31
// Setup initializes the Suite by getting the subject.
@@ -32,7 +34,13 @@ func (suite *Suite) Setup() error {
32
34
if err != nil {
33
35
return err
34
36
}
37
+
38
+ docker , err := GetDocker ()
39
+ if err != nil {
40
+ return err
41
+ }
35
42
suite .subject = subject
43
+ suite .docker = docker
36
44
return nil
37
45
}
38
46
@@ -80,18 +88,128 @@ func (suite *Suite) BenchmarkVMStart(b *testing.B) {
80
88
}
81
89
82
90
// BenchmarkContainerRun measures the metrics to run a container.
83
- func (suite * Suite ) BenchmarkContainerRun (b * testing.B ) {
84
- assert .NoError (b , exec .Command (suite .subject , "pull" , alpineImage ).Run ()) //nolint:gosec // testing only
91
+ func (suite * Suite ) BenchmarkContainerRun (b * testing.B , binaryName string ) {
92
+ if binaryName == "finch" {
93
+ assert .NoError (b , exec .Command ("sudo" , suite .subject , "pull" , alpineImage ).Run ()) //nolint:gosec // testing only
94
+ Wrapper (b , func () {
95
+ assert .NoError (b , exec .Command ("sudo" , suite .subject , "run" , "--name" , testContainerName , alpineImage ).Run ()) //nolint:gosec // testing only
96
+ }, func () {
97
+ assert .NoError (b , exec .Command ("sudo" , suite .subject , "rm" , "--force" , testContainerName ).Run ()) //nolint:gosec // testing only
98
+ })
99
+ assert .NoError (b , exec .Command ("sudo" , suite .subject , "rmi" , "--force" , alpineImage ).Run ()) //nolint:gosec // testing only
100
+ } else {
101
+ assert .NoError (b , CleanUpFunc ())
102
+ assert .NoError (b , exec .Command ("sudo" , suite .docker , "pull" , alpineImage ).Run ()) //nolint:gosec // testing only
103
+ Wrapper (b , func () {
104
+ assert .NoError (b , exec .Command ("sudo" , suite .docker , "run" , "--name" , testContainerName , alpineImage ).Run ()) //nolint:gosec // testing only
105
+ }, func () {
106
+ assert .NoError (b , exec .Command ("sudo" , suite .docker , "rm" , "--force" , testContainerName ).Run ()) //nolint:gosec // testing only
107
+ })
108
+ assert .NoError (b , exec .Command ("sudo" , suite .docker , "rmi" , "--force" , alpineImage ).Run ()) //nolint:gosec // testing only
109
+ }
110
+
111
+ }
112
+
113
+ func (suite * Suite ) BenchmarkContainerRunDocker (b * testing.B ) {
114
+ assert .NoError (b , exec .Command ("sudo" , suite .docker , "pull" , alpineImage ).Run ()) //nolint:gosec // testing only
85
115
Wrapper (b , func () {
86
- assert .NoError (b , exec .Command (suite .subject , "run" , "--name" , testContainerName , alpineImage ).Run ()) //nolint:gosec // testing only
116
+ assert .NoError (b , exec .Command ("sudo" , suite .docker , "run" , "--name" , testContainerName , alpineImage ).Run ()) //nolint:gosec // testing only
87
117
}, func () {
88
- assert .NoError (b , exec .Command (suite .subject , "rm" , "--force" , testContainerName ).Run ()) //nolint:gosec // testing only
118
+ assert .NoError (b , exec .Command ("sudo" , suite .docker , "rm" , "--force" , testContainerName ).Run ()) //nolint:gosec // testing only
89
119
})
90
- assert .NoError (b , exec .Command (suite .subject , "rmi" , "--force" , alpineImage ).Run ()) //nolint:gosec // testing only
120
+ assert .NoError (b , exec .Command ("sudo" , suite .docker , "rmi" , "--force" , alpineImage ).Run ()) //nolint:gosec // testing only
121
+ }
122
+
123
+ func (suite * Suite ) BenchmarkContainerPull (b * testing.B , binaryName string ) {
124
+ if binaryName == "finch" {
125
+ Wrapper (b , func () {
126
+ assert .NoError (b , exec .Command ("sudo" , suite .subject , "pull" , alpineImage ).Run ()) //nolint:gosec // testing only
127
+ }, func () {
128
+ assert .NoError (b , exec .Command ("sudo" , suite .subject , "rmi" , "--force" , alpineImage ).Run ()) //nolint:gosec // testing only
129
+ })
130
+ } else {
131
+ assert .NoError (b , CleanUpFunc ())
132
+ Wrapper (b , func () {
133
+ assert .NoError (b , exec .Command ("sudo" , suite .docker , "pull" , alpineImage ).Run ()) //nolint:gosec // testing only
134
+ }, func () {
135
+ assert .NoError (b , exec .Command ("sudo" , suite .docker , "rmi" , "--force" , alpineImage ).Run ()) //nolint:gosec // testing only
136
+ })
137
+ }
91
138
}
92
139
140
+ // func (suite *Suite) BenchmarkContainerPullDocker(b *testing.B) {
141
+ // assert.NoError(b, CleanUpFunc())
142
+ // Wrapper(b, func() {
143
+ // assert.NoError(b, exec.Command("sudo", suite.docker, "pull", alpineImage).Run()) //nolint:gosec // testing only
144
+ // }, func() {
145
+ // assert.NoError(b, exec.Command("sudo", suite.docker, "rmi", "--force", alpineImage).Run()) //nolint:gosec // testing only
146
+ // })
147
+ // }
148
+
149
+ // func (suite *Suite) BenchmarkContainerPullFinch(b *testing.B) {
150
+ // Wrapper(b, func() {
151
+ // assert.NoError(b, exec.Command("sudo", suite.subject, "pull", alpineImage).Run()) //nolint:gosec // testing only
152
+ // }, func() {
153
+ // assert.NoError(b, exec.Command("sudo", suite.subject, "rmi", "--force", alpineImage).Run()) //nolint:gosec // testing only
154
+ // })
155
+ // }
156
+
93
157
// BenchmarkImageBuild measures the metrics to build an image.
94
- func (suite * Suite ) BenchmarkImageBuild (b * testing.B ) {
158
+ func (suite * Suite ) BenchmarkImageBuild (b * testing.B , binaryName string ) {
159
+ homeDir , err := os .UserHomeDir ()
160
+ assert .NoError (b , err )
161
+ tempDir , err := os .MkdirTemp (homeDir , "finch-test" )
162
+ assert .NoError (b , err )
163
+ dockerFilePath := filepath .Join (tempDir , "Dockerfile" )
164
+ err = os .WriteFile (dockerFilePath , []byte (fmt .Sprintf (`FROM %s
165
+ CMD ["echo", "finch-test-dummy-output"]
166
+ ` , alpineImage )), 0o600 )
167
+ assert .NoError (b , err )
168
+ buildContext := filepath .Dir (dockerFilePath )
169
+ defer os .RemoveAll (buildContext ) //nolint:errcheck // testing only
170
+ if binaryName == "finch" {
171
+ assert .NoError (b , exec .Command ("sudo" , suite .subject , "builder" , "prune" ).Run ())
172
+ Wrapper (b , func () {
173
+ assert .NoError (b , exec .Command ("sudo" , suite .subject , "build" , "--tag" , testImageName , buildContext , "--no-cache" ).Run ()) //nolint:gosec // testing only
174
+ }, func () {
175
+ assert .NoError (b , exec .Command ("sudo" , suite .subject , "rmi" , "--force" , testImageName ).Run ()) //nolint:gosec // testing only
176
+ })
177
+ } else {
178
+ assert .NoError (b , CleanUpFunc ())
179
+ Wrapper (b , func () {
180
+ // assert.NoError(b, exec.Command("sudo","DOCKER_BUILDKIT=0", suite.docker, "buildx", "build", "--tag", testImageName, buildContext, "--no-cache", "--builder", "default" "--pull", "--build-arg", "CACHEBUST=$(date +%s)").Run()) //nolint:gosec // testing only
181
+ assert .NoError (b , exec .Command ("sudo" , "DOCKER_BUILDKIT=0" , suite .docker , "buildx" , "build" , "--tag" , testImageName , buildContext , "--no-cache" ).Run ()) //nolint:gosec // testing only
182
+ }, func () {
183
+ assert .NoError (b , exec .Command ("sudo" , suite .docker , "rmi" , "--force" , testImageName ).Run ()) //nolint:gosec // testing only
184
+ })
185
+ }
186
+ }
187
+
188
+ func (suite * Suite ) BenchmarkImageBuildDocker (b * testing.B ) {
189
+ homeDir , err := os .UserHomeDir ()
190
+ assert .NoError (b , err )
191
+ tempDir , err := os .MkdirTemp (homeDir , "finch-test" )
192
+ assert .NoError (b , err )
193
+ dockerFilePath := filepath .Join (tempDir , "Dockerfile" )
194
+ err = os .WriteFile (dockerFilePath , []byte (fmt .Sprintf (`FROM %s
195
+ CMD ["echo", "finch-test-dummy-output"]
196
+ ` , alpineImage )), 0o600 )
197
+ assert .NoError (b , err )
198
+ buildContext := filepath .Dir (dockerFilePath )
199
+ defer os .RemoveAll (buildContext ) //nolint:errcheck // testing only
200
+ assert .NoError (b , exec .Command ("sudo" , "rm" , "-rf" , "/var/lib/docker" ).Run ())
201
+ assert .NoError (b , exec .Command ("sudo" , "rm" , "-rf" , "/var/run/docker.pid" ).Run ())
202
+ assert .NoError (b , exec .Command ("sudo" , "systemctl" , "restart" , "docker" ).Run ())
203
+ // assert.NoError(b, exec.Command("sudo", suite.docker, "system", "prune", "-f", "--all", "--volumes").Run())
204
+ Wrapper (b , func () {
205
+ // assert.NoError(b, exec.Command("sudo","DOCKER_BUILDKIT=0", suite.docker, "buildx", "build", "--tag", testImageName, buildContext, "--no-cache", "--builder", "default" "--pull", "--build-arg", "CACHEBUST=$(date +%s)").Run()) //nolint:gosec // testing only
206
+ assert .NoError (b , exec .Command ("sudo" , "DOCKER_BUILDKIT=0" , suite .docker , "buildx" , "build" , "--tag" , testImageName , buildContext , "--no-cache" ).Run ()) //nolint:gosec // testing only
207
+ }, func () {
208
+ assert .NoError (b , exec .Command ("sudo" , suite .docker , "rmi" , "--force" , testImageName ).Run ()) //nolint:gosec // testing only
209
+ })
210
+ }
211
+
212
+ func (suite * Suite ) BenchmarkImageDelete (b * testing.B , binaryImage string ) {
95
213
homeDir , err := os .UserHomeDir ()
96
214
assert .NoError (b , err )
97
215
tempDir , err := os .MkdirTemp (homeDir , "finch-test" )
@@ -103,9 +221,39 @@ func (suite *Suite) BenchmarkImageBuild(b *testing.B) {
103
221
assert .NoError (b , err )
104
222
buildContext := filepath .Dir (dockerFilePath )
105
223
defer os .RemoveAll (buildContext ) //nolint:errcheck // testing only
224
+ if binaryImage == "finch" {
225
+ assert .NoError (b , exec .Command ("sudo" , suite .subject , "build" , "--tag" , testImageName , buildContext ).Run ()) //nolint:gosec // testing only
226
+ Wrapper (b , func () {
227
+ assert .NoError (b , exec .Command ("sudo" , suite .subject , "rmi" , "--force" , testImageName ).Run ()) //nolint:gosec // testing only
228
+ }, func () {
229
+ assert .NoError (b , exec .Command ("sudo" , suite .subject , "rmi" , "--help" ).Run ())
230
+ })
231
+ } else {
232
+ assert .NoError (b , exec .Command ("sudo" , suite .docker , "build" , "--tag" , testImageName , buildContext ).Run ()) //nolint:gosec // testing only
233
+ Wrapper (b , func () {
234
+ assert .NoError (b , exec .Command ("sudo" , suite .docker , "rmi" , "--force" , testImageName ).Run ()) //nolint:gosec // testing only
235
+ }, func () {
236
+ assert .NoError (b , exec .Command ("sudo" , suite .docker , "rmi" , "--help" ).Run ())
237
+ })
238
+ }
239
+ }
240
+
241
+ func (suite * Suite ) BenchmarkImageDeleteDocker (b * testing.B ) {
242
+ homeDir , err := os .UserHomeDir ()
243
+ assert .NoError (b , err )
244
+ tempDir , err := os .MkdirTemp (homeDir , "finch-test" )
245
+ assert .NoError (b , err )
246
+ dockerFilePath := filepath .Join (tempDir , "Dockerfile" )
247
+ err = os .WriteFile (dockerFilePath , []byte (fmt .Sprintf (`FROM %s
248
+ CMD ["echo", "finch-test-dummy-output"]
249
+ ` , alpineImage )), 0o600 )
250
+ assert .NoError (b , err )
251
+ buildContext := filepath .Dir (dockerFilePath )
252
+ defer os .RemoveAll (buildContext ) //nolint:errcheck // testing only
253
+ assert .NoError (b , exec .Command ("sudo" , suite .docker , "build" , "--tag" , testImageName , buildContext ).Run ()) //nolint:gosec // testing only
106
254
Wrapper (b , func () {
107
- assert .NoError (b , exec .Command (suite .subject , "build " , "--tag " , testImageName , buildContext ).Run ()) //nolint:gosec // testing only
255
+ assert .NoError (b , exec .Command ("sudo" , suite .docker , "rmi " , "--force " , testImageName ).Run ()) //nolint:gosec // testing only
108
256
}, func () {
109
- assert .NoError (b , exec .Command (suite .subject , "rmi" , "--force" , testImageName ).Run ()) //nolint:gosec // testing only
257
+ assert .NoError (b , exec .Command ("sudo" , suite .docker , "rmi" , "--help" ).Run ())
110
258
})
111
259
}
0 commit comments