@@ -16,14 +16,17 @@ import (
1616
1717const (
1818 virtualMachineRootCmd = "vm"
19- alpineImage = "public.ecr.aws/docker/library/alpine :latest"
19+ alpineImage = "public.ecr.aws/y0o4y9o3/anaconda-pkg-build :latest"
2020 testImageName = "test:tag"
2121 testContainerName = "ctr-test"
22+ ligthImage = "public.ecr.aws/docker/library/amazonlinux:latest"
2223)
2324
25+ // public.ecr.aws/soci-workshop-examples/mongo:latest public.ecr.aws/soci-workshop-examples/redis:latest public.ecr.aws/docker/library/alpine:latest
2426// Suite is a struct that groups benchmark functions and shared state.
2527type Suite struct {
2628 subject string
29+ docker string
2730}
2831
2932// Setup initializes the Suite by getting the subject.
@@ -32,7 +35,13 @@ func (suite *Suite) Setup() error {
3235 if err != nil {
3336 return err
3437 }
38+
39+ docker , err := GetDocker ()
40+ if err != nil {
41+ return err
42+ }
3543 suite .subject = subject
44+ suite .docker = docker
3645 return nil
3746}
3847
@@ -80,18 +89,49 @@ func (suite *Suite) BenchmarkVMStart(b *testing.B) {
8089}
8190
8291// 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
85- Wrapper (b , func () {
86- assert .NoError (b , exec .Command (suite .subject , "run" , "--name" , testContainerName , alpineImage ).Run ()) //nolint:gosec // testing only
87- }, func () {
88- assert .NoError (b , exec .Command (suite .subject , "rm" , "--force" , testContainerName ).Run ()) //nolint:gosec // testing only
89- })
90- assert .NoError (b , exec .Command (suite .subject , "rmi" , "--force" , alpineImage ).Run ()) //nolint:gosec // testing only
92+ func (suite * Suite ) BenchmarkContainerRun (b * testing.B , binaryName string ) {
93+ // assert.NoError(b, CleanUpFunc())
94+ if binaryName == "finch" {
95+ assert .NoError (b , exec .Command ("sudo" , suite .subject , "pull" , alpineImage ).Run ()) //nolint:gosec // testing only
96+ Wrapper (b , func () {
97+ assert .NoError (b , exec .Command ("sudo" , suite .subject , "run" , "--name" , testContainerName , alpineImage ).Run ()) //nolint:gosec // testing only
98+ }, func () {
99+ assert .NoError (b , exec .Command ("sudo" , suite .subject , "rm" , "--force" , testContainerName ).Run ()) //nolint:gosec // testing only
100+ })
101+ assert .NoError (b , exec .Command ("sudo" , suite .subject , "rmi" , "--force" , alpineImage ).Run ()) //nolint:gosec // testing only
102+ } else {
103+ // assert.NoError(b, CleanUpFunc())
104+ assert .NoError (b , exec .Command ("sudo" , suite .docker , "pull" , alpineImage ).Run ()) //nolint:gosec // testing only
105+ Wrapper (b , func () {
106+ assert .NoError (b , exec .Command ("sudo" , suite .docker , "run" , "--name" , testContainerName , alpineImage ).Run ()) //nolint:gosec // testing only
107+ }, func () {
108+ assert .NoError (b , exec .Command ("sudo" , suite .docker , "rm" , "--force" , testContainerName ).Run ()) //nolint:gosec // testing only
109+ })
110+ assert .NoError (b , exec .Command ("sudo" , suite .docker , "rmi" , "--force" , alpineImage ).Run ()) //nolint:gosec // testing only
111+ }
112+
113+ }
114+
115+ func (suite * Suite ) BenchmarkContainerPull (b * testing.B , binaryName string ) {
116+ if binaryName == "finch" {
117+ Wrapper (b , func () {
118+ assert .NoError (b , exec .Command ("sudo" , suite .subject , "pull" , alpineImage , "--namespace=finch" ).Run ()) //nolint:gosec // testing only
119+ }, func () {
120+ assert .NoError (b , exec .Command ("sudo" , suite .subject , "rmi" , "--force" , alpineImage ).Run ()) //nolint:gosec // testing only
121+ })
122+ } else {
123+ assert .NoError (b , exec .Command ("sudo" , suite .docker , "images" , "prune" , "-a" ).Run ())
124+ assert .NoError (b , exec .Command ("sudo" , suite .docker , "volume" , "prune" , "-a" ).Run ())
125+ Wrapper (b , func () {
126+ assert .NoError (b , exec .Command ("sudo" , suite .docker , "pull" , alpineImage ).Run ()) //nolint:gosec // testing only
127+ }, func () {
128+ assert .NoError (b , exec .Command ("sudo" , suite .docker , "rmi" , "--force" , alpineImage ).Run ()) //nolint:gosec // testing only
129+ })
130+ }
91131}
92132
93133// BenchmarkImageBuild measures the metrics to build an image.
94- func (suite * Suite ) BenchmarkImageBuild (b * testing.B ) {
134+ func (suite * Suite ) BenchmarkImageBuild (b * testing.B , binaryName string ) {
95135 homeDir , err := os .UserHomeDir ()
96136 assert .NoError (b , err )
97137 tempDir , err := os .MkdirTemp (homeDir , "finch-test" )
@@ -103,9 +143,50 @@ func (suite *Suite) BenchmarkImageBuild(b *testing.B) {
103143 assert .NoError (b , err )
104144 buildContext := filepath .Dir (dockerFilePath )
105145 defer os .RemoveAll (buildContext ) //nolint:errcheck // testing only
106- Wrapper (b , func () {
107- assert .NoError (b , exec .Command (suite .subject , "build" , "--tag" , testImageName , buildContext ).Run ()) //nolint:gosec // testing only
108- }, func () {
109- assert .NoError (b , exec .Command (suite .subject , "rmi" , "--force" , testImageName ).Run ()) //nolint:gosec // testing only
110- })
146+ // assert.NoError(b, CleanUpFunc())
147+ if binaryName == "finch" {
148+ assert .NoError (b , exec .Command ("sudo" , suite .subject , "builder" , "prune" ).Run ())
149+ Wrapper (b , func () {
150+ assert .NoError (b , exec .Command ("sudo" , suite .subject , "build" , "--tag" , testImageName , buildContext , "--namespace=finch" ).Run ()) //nolint:gosec // testing only
151+ }, func () {
152+ assert .NoError (b , exec .Command ("sudo" , suite .subject , "rmi" , "--force" , testImageName ).Run ()) //nolint:gosec // testing only
153+ })
154+ } else {
155+ // assert.NoError(b, CleanUpFunc())
156+ assert .NoError (b , exec .Command ("sudo" , suite .docker , "builder" , "prune" ).Run ())
157+ Wrapper (b , func () {
158+ assert .NoError (b , exec .Command ("sudo" , suite .docker , "build" , "--tag" , testImageName , buildContext , "--no-cache" ).Run ()) //nolint:gosec // testing only
159+ }, func () {
160+ assert .NoError (b , exec .Command ("sudo" , suite .docker , "rmi" , "--force" , testImageName ).Run ()) //nolint:gosec // testing only
161+ })
162+ }
163+ }
164+
165+ func (suite * Suite ) BenchmarkImageDelete (b * testing.B , binaryImage string ) {
166+ homeDir , err := os .UserHomeDir ()
167+ assert .NoError (b , err )
168+ tempDir , err := os .MkdirTemp (homeDir , "finch-test" )
169+ assert .NoError (b , err )
170+ dockerFilePath := filepath .Join (tempDir , "Dockerfile" )
171+ err = os .WriteFile (dockerFilePath , []byte (fmt .Sprintf (`FROM %s
172+ CMD ["echo", "finch-test-dummy-output"]
173+ ` , alpineImage )), 0o600 )
174+ assert .NoError (b , err )
175+ buildContext := filepath .Dir (dockerFilePath )
176+ defer os .RemoveAll (buildContext ) //nolint:errcheck // testing only
177+ if binaryImage == "finch" {
178+ assert .NoError (b , exec .Command ("sudo" , suite .subject , "build" , "--tag" , testImageName , buildContext ).Run ()) //nolint:gosec // testing only
179+ Wrapper (b , func () {
180+ assert .NoError (b , exec .Command ("sudo" , suite .subject , "rmi" , "--force" , testImageName ).Run ()) //nolint:gosec // testing only
181+ }, func () {
182+ assert .NoError (b , exec .Command ("sudo" , suite .subject , "rmi" , "--help" ).Run ())
183+ })
184+ } else {
185+ assert .NoError (b , exec .Command ("sudo" , suite .docker , "build" , "--tag" , testImageName , buildContext ).Run ()) //nolint:gosec // testing only
186+ Wrapper (b , func () {
187+ assert .NoError (b , exec .Command ("sudo" , suite .docker , "rmi" , "--force" , testImageName ).Run ()) //nolint:gosec // testing only
188+ }, func () {
189+ assert .NoError (b , exec .Command ("sudo" , suite .docker , "rmi" , "--help" ).Run ())
190+ })
191+ }
111192}
0 commit comments