Skip to content

Commit 7ed9fb3

Browse files
committed
Switches to imposter-cli module for mock engine functionality.
1 parent 0451772 commit 7ed9fb3

3 files changed

Lines changed: 34 additions & 103 deletions

File tree

cmd/mock.go

Lines changed: 11 additions & 92 deletions
Original file line numberDiff line numberDiff line change
@@ -16,17 +16,10 @@ limitations under the License.
1616
package cmd
1717

1818
import (
19-
"context"
2019
"fmt"
21-
"github.com/docker/docker/api/types"
22-
"github.com/docker/docker/api/types/container"
23-
"github.com/docker/docker/api/types/mount"
24-
"github.com/docker/docker/client"
25-
"github.com/docker/docker/pkg/stdcopy"
26-
"github.com/docker/go-connections/nat"
20+
"gatehill.io/imposter/engine"
2721
"github.com/sirupsen/logrus"
2822
"github.com/spf13/cobra"
29-
"io"
3023
"opendeps.org/opendeps/fileutil"
3124
"opendeps.org/opendeps/model"
3225
"os"
@@ -55,76 +48,21 @@ by this tool.`,
5548
stagingDir := generateMockConfig(specFile, spec)
5649
defer os.Remove(stagingDir)
5750

58-
startMockEngine(stagingDir)
51+
containerId := engine.StartMockEngine(stagingDir, engine.EngineStartOptions{
52+
Port: 8080,
53+
ImageTag: "latest",
54+
ForceImagePull: false,
55+
LogLevel: "DEBUG",
56+
})
57+
trapExit(containerId)
58+
engine.BlockUntilStopped(containerId)
5959
},
6060
}
6161

6262
func init() {
6363
rootCmd.AddCommand(mockCmd)
6464
}
6565

66-
func startMockEngine(stagingDir string) {
67-
logrus.Info("starting mock engine")
68-
69-
ctx := context.Background()
70-
cli, err := client.NewClientWithOpts(client.FromEnv, client.WithAPIVersionNegotiation())
71-
if err != nil {
72-
panic(err)
73-
}
74-
75-
reader, err := cli.ImagePull(ctx, "docker.io/outofcoffee/imposter-openapi", types.ImagePullOptions{})
76-
if err != nil {
77-
panic(err)
78-
}
79-
_, err = io.Copy(os.Stdout, reader)
80-
if err != nil {
81-
panic(err)
82-
}
83-
84-
resp, err := cli.ContainerCreate(ctx, &container.Config{
85-
Image: "outofcoffee/imposter-openapi",
86-
}, &container.HostConfig{
87-
Mounts: []mount.Mount{
88-
{
89-
Type: mount.TypeBind,
90-
Source: stagingDir,
91-
Target: "/opt/imposter/config",
92-
},
93-
},
94-
PortBindings: nat.PortMap{
95-
"8080/tcp": []nat.PortBinding{
96-
{
97-
HostIP: "0.0.0.0",
98-
HostPort: "8080",
99-
},
100-
},
101-
},
102-
}, nil, nil, "")
103-
if err != nil {
104-
panic(err)
105-
}
106-
107-
if err := cli.ContainerStart(ctx, resp.ID, types.ContainerStartOptions{}); err != nil {
108-
panic(err)
109-
}
110-
111-
trapExit(cli, ctx, resp.ID)
112-
println("container engine started - press ctrl+c to stop")
113-
114-
out, err := cli.ContainerLogs(ctx, resp.ID, types.ContainerLogsOptions{
115-
ShowStdout: true,
116-
Follow: true,
117-
})
118-
if err != nil {
119-
panic(err)
120-
}
121-
122-
_, err = stdcopy.StdCopy(os.Stdout, os.Stderr, out)
123-
if err != nil {
124-
panic(err)
125-
}
126-
}
127-
12866
func generateMockConfig(specFile string, spec *model.OpenDeps) string {
12967
stagingDir := fileutil.GenerateStagingDir()
13068

@@ -174,32 +112,13 @@ specFile: "%v"
174112
}
175113
}
176114

177-
func stopMockEngine(cli *client.Client, ctx context.Context, containerID string) {
178-
logrus.Infof("\rstopping mock engine...\n")
179-
err := cli.ContainerStop(ctx, containerID, nil)
180-
if err != nil {
181-
panic(err)
182-
}
183-
184-
statusCh, errCh := cli.ContainerWait(ctx, containerID, container.WaitConditionNotRunning)
185-
select {
186-
case err := <-errCh:
187-
if err != nil {
188-
panic(err)
189-
}
190-
case <-statusCh:
191-
}
192-
193-
println("container engine stopped")
194-
}
195-
196115
// listen for an interrupt from the OS, then attempt engine cleanup
197-
func trapExit(cli *client.Client, ctx context.Context, containerID string) {
116+
func trapExit(containerId string) {
198117
c := make(chan os.Signal)
199118
signal.Notify(c, os.Interrupt, syscall.SIGTERM)
200119
go func() {
201120
<-c
202-
stopMockEngine(cli, ctx, containerID)
121+
engine.StopMockEngine(containerId)
203122
os.Exit(0)
204123
}()
205124
}

go.mod

Lines changed: 12 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -2,12 +2,13 @@ module opendeps.org/opendeps
22

33
go 1.17
44

5+
replace gatehill.io/imposter => github.com/gatehill/imposter-cli v0.3.10
6+
57
require (
8+
gatehill.io/imposter v0.3.10
69
github.com/Microsoft/go-winio v0.5.0 // indirect
710
github.com/containerd/containerd v1.5.5 // indirect
811
github.com/docker/distribution v2.7.1+incompatible // indirect
9-
github.com/docker/docker v20.10.8+incompatible
10-
github.com/docker/go-connections v0.4.0
1112
github.com/docker/go-units v0.4.0 // indirect
1213
github.com/fsnotify/fsnotify v1.5.1 // indirect
1314
github.com/gogo/protobuf v1.3.2 // indirect
@@ -19,7 +20,6 @@ require (
1920
github.com/mitchellh/go-homedir v1.1.0
2021
github.com/mitchellh/mapstructure v1.4.1 // indirect
2122
github.com/moby/term v0.0.0-20210610120745-9d4ed1856297 // indirect
22-
github.com/morikuni/aec v1.0.0 // indirect
2323
github.com/opencontainers/go-digest v1.0.0 // indirect
2424
github.com/opencontainers/image-spec v1.0.1 // indirect
2525
github.com/pelletier/go-toml v1.9.3 // indirect
@@ -35,13 +35,18 @@ require (
3535
github.com/xeipuuv/gojsonpointer v0.0.0-20190905194746-02993c407bfb // indirect
3636
github.com/xeipuuv/gojsonreference v0.0.0-20180127040603-bd5ef7bd5415 // indirect
3737
github.com/xeipuuv/gojsonschema v1.2.0
38-
golang.org/x/net v0.0.0-20210405180319-a5a99cb37ef4 // indirect
39-
golang.org/x/sys v0.0.0-20210630005230-0f9fa26af87c // indirect
40-
golang.org/x/text v0.3.6 // indirect
41-
google.golang.org/genproto v0.0.0-20210830153122-0bac4d21c8ea // indirect
38+
golang.org/x/net v0.0.0-20210825183410-e898025ed96a // indirect
39+
golang.org/x/sys v0.0.0-20210823070655-63515b42dcdf // indirect
40+
golang.org/x/text v0.3.7 // indirect
41+
google.golang.org/genproto v0.0.0-20210831024726-fe130286e0e2 // indirect
4242
google.golang.org/grpc v1.40.0 // indirect
4343
google.golang.org/protobuf v1.27.1 // indirect
4444
gopkg.in/ini.v1 v1.62.0 // indirect
4545
gopkg.in/yaml.v2 v2.4.0
4646
sigs.k8s.io/yaml v1.2.0
4747
)
48+
49+
require (
50+
github.com/docker/docker v20.10.8+incompatible // indirect
51+
github.com/docker/go-connections v0.4.0 // indirect
52+
)

go.sum

Lines changed: 11 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -281,6 +281,8 @@ github.com/fsnotify/fsnotify v1.5.1 h1:mZcQUHVQUQWoPXXtuf9yuEXKudkV2sx1E06UadKWp
281281
github.com/fsnotify/fsnotify v1.5.1/go.mod h1:T3375wBYaZdLLcVNkcVbzGHY7f1l/uK5T5Ai1i3InKU=
282282
github.com/fullsailor/pkcs7 v0.0.0-20190404230743-d7302db945fa/go.mod h1:KnogPXtdwXqoenmZCw6S+25EAm2MkxbG0deNDu4cbSA=
283283
github.com/garyburd/redigo v0.0.0-20150301180006-535138d7bcd7/go.mod h1:NR3MbYisc3/PwhQ00EMzDiPmrwpPxAn5GI05/YaO1SY=
284+
github.com/gatehill/imposter-cli v0.3.10 h1:TCvMnrSx9xa7uWcwz+FRqZmWT/QgDw/gWoAOJTLf8Ds=
285+
github.com/gatehill/imposter-cli v0.3.10/go.mod h1:cbjLJTt2Dh2fbzVHBjQii+X4QWRVQ/PGkdB7VByXKoY=
284286
github.com/ghodss/yaml v0.0.0-20150909031657-73d445a93680/go.mod h1:4dBDuWmgqj2HViK6kFavaiC9ZROes6MMH2rRYeMEF04=
285287
github.com/ghodss/yaml v1.0.0/go.mod h1:4dBDuWmgqj2HViK6kFavaiC9ZROes6MMH2rRYeMEF04=
286288
github.com/go-gl/glfw v0.0.0-20190409004039-e6da0acd62b1/go.mod h1:vR7hzQXu2zJy9AVAgeJqvqgH9Q5CA+iKCZ2gyEVpxRU=
@@ -821,8 +823,9 @@ golang.org/x/net v0.0.0-20201224014010-6772e930b67b/go.mod h1:m0MpNAwzfU5UDzcl9v
821823
golang.org/x/net v0.0.0-20210119194325-5f4716e94777/go.mod h1:m0MpNAwzfU5UDzcl9v0D8zg8gWTRqZa9RBIspLL5mdg=
822824
golang.org/x/net v0.0.0-20210226172049-e18ecbb05110/go.mod h1:m0MpNAwzfU5UDzcl9v0D8zg8gWTRqZa9RBIspLL5mdg=
823825
golang.org/x/net v0.0.0-20210316092652-d523dce5a7f4/go.mod h1:RBQZq4jEuRlivfhVLdyRGr576XBO4/greRjx4P4O3yc=
824-
golang.org/x/net v0.0.0-20210405180319-a5a99cb37ef4 h1:4nGaVu0QrbjT/AK2PRLuQfQuh6DJve+pELhqTdAj3x0=
825826
golang.org/x/net v0.0.0-20210405180319-a5a99cb37ef4/go.mod h1:p54w0d4576C0XHj96bSt6lcn1PtDYWL6XObtHCRCNQM=
827+
golang.org/x/net v0.0.0-20210825183410-e898025ed96a h1:bRuuGXV8wwSdGTB+CtJf+FjgO1APK1CoO39T4BN/XBw=
828+
golang.org/x/net v0.0.0-20210825183410-e898025ed96a/go.mod h1:9nx3DQGgdP8bBQD5qxJ1jj9UTztislL4KSBs9R2vV5Y=
826829
golang.org/x/oauth2 v0.0.0-20180821212333-d2e6202438be/go.mod h1:N/0e6XlmueqKjAGxoOufVs8QHGRruUQn6yWY3a++T0U=
827830
golang.org/x/oauth2 v0.0.0-20190226205417-e64efc72b421/go.mod h1:gOpvHmFTYa4IltrdGE7lF6nIHvwfUNPOp7c8zoXwtLw=
828831
golang.org/x/oauth2 v0.0.0-20190604053449-0f29369cfe45/go.mod h1:gOpvHmFTYa4IltrdGE7lF6nIHvwfUNPOp7c8zoXwtLw=
@@ -923,10 +926,12 @@ golang.org/x/sys v0.0.0-20210320140829-1e4c9ba3b0c4/go.mod h1:h1NjWce9XRLGQEsW7w
923926
golang.org/x/sys v0.0.0-20210324051608-47abb6519492/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
924927
golang.org/x/sys v0.0.0-20210330210617-4fbd30eecc44/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
925928
golang.org/x/sys v0.0.0-20210403161142-5e06dd20ab57/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
929+
golang.org/x/sys v0.0.0-20210423082822-04245dca01da/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
926930
golang.org/x/sys v0.0.0-20210426230700-d19ff857e887/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
927931
golang.org/x/sys v0.0.0-20210510120138-977fb7262007/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
928-
golang.org/x/sys v0.0.0-20210630005230-0f9fa26af87c h1:F1jZWGFhYfh0Ci55sIpILtKKK8p3i2/krTr0H1rg74I=
929932
golang.org/x/sys v0.0.0-20210630005230-0f9fa26af87c/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
933+
golang.org/x/sys v0.0.0-20210823070655-63515b42dcdf h1:2ucpDCmfkl8Bd/FsLtiD653Wf96cW37s+iGx93zsu4k=
934+
golang.org/x/sys v0.0.0-20210823070655-63515b42dcdf/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
930935
golang.org/x/term v0.0.0-20201126162022-7de9c90e9dd1/go.mod h1:bj7SfCRtBDWHUb9snDiAeCFNEtKQo2Wmx5Cou7ajbmo=
931936
golang.org/x/text v0.0.0-20170915032832-14c0d48ead0c/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ=
932937
golang.org/x/text v0.3.0/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ=
@@ -935,8 +940,9 @@ golang.org/x/text v0.3.2/go.mod h1:bEr9sfX3Q8Zfm5fL9x+3itogRgK3+ptLWKqgva+5dAk=
935940
golang.org/x/text v0.3.3/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ=
936941
golang.org/x/text v0.3.4/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ=
937942
golang.org/x/text v0.3.5/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ=
938-
golang.org/x/text v0.3.6 h1:aRYxNxv6iGQlyVaZmk6ZgYEDa+Jg18DxebPSrd6bg1M=
939943
golang.org/x/text v0.3.6/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ=
944+
golang.org/x/text v0.3.7 h1:olpwvP2KacW1ZWvsR7uQhoyTYvKAupfQrRGBFM352Gk=
945+
golang.org/x/text v0.3.7/go.mod h1:u+2+/6zg+i71rQMx5EYifcz6MCKuco9NR6JIITiCfzQ=
940946
golang.org/x/time v0.0.0-20180412165947-fbb02b2291d2/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ=
941947
golang.org/x/time v0.0.0-20181108054448-85acf8d2951c/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ=
942948
golang.org/x/time v0.0.0-20190308202827-9d24e82272b4/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ=
@@ -1079,8 +1085,9 @@ google.golang.org/genproto v0.0.0-20210310155132-4ce2db91004e/go.mod h1:FWY/as6D
10791085
google.golang.org/genproto v0.0.0-20210319143718-93e7006c17a6/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no=
10801086
google.golang.org/genproto v0.0.0-20210402141018-6c239bbf2bb1/go.mod h1:9lPAdzaEmUacj36I+k7YKbEc5CXzPIeORRgDAUOu28A=
10811087
google.golang.org/genproto v0.0.0-20210602131652-f16073e35f0c/go.mod h1:UODoCrxHCcBojKKwX1terBiRUaqAsFqJiF615XL43r0=
1082-
google.golang.org/genproto v0.0.0-20210830153122-0bac4d21c8ea h1:5eMUso2GVOxypVH1fR4oKgDobrvi4DHctJ4fVk66s/4=
10831088
google.golang.org/genproto v0.0.0-20210830153122-0bac4d21c8ea/go.mod h1:eFjDcFEctNawg4eG61bRv87N7iHBWyVhJu7u1kqDUXY=
1089+
google.golang.org/genproto v0.0.0-20210831024726-fe130286e0e2 h1:NHN4wOCScVzKhPenJ2dt+BTs3X/XkBVI/Rh4iDt55T8=
1090+
google.golang.org/genproto v0.0.0-20210831024726-fe130286e0e2/go.mod h1:eFjDcFEctNawg4eG61bRv87N7iHBWyVhJu7u1kqDUXY=
10841091
google.golang.org/grpc v0.0.0-20160317175043-d3ddb4469d5a/go.mod h1:yo6s7OP7yaDglbqo1J04qKzAhqBH6lvTonzMVmEdcZw=
10851092
google.golang.org/grpc v1.19.0/go.mod h1:mqu4LbDTu4XGKhr4mRzUsmM4RtVoemTSY81AxZiDr8c=
10861093
google.golang.org/grpc v1.20.1/go.mod h1:10oTOabMzJvdu6/UiuZezV6QK5dSlG84ov/aaiqXj38=

0 commit comments

Comments
 (0)