This commit is contained in:
parent
63532b39f8
commit
1fc9672971
2
Makefile
2
Makefile
@ -22,7 +22,7 @@ run:
|
|||||||
test:
|
test:
|
||||||
go test -coverprofile=coverage.out
|
go test -coverprofile=coverage.out
|
||||||
go tool cover -func=coverage.out
|
go tool cover -func=coverage.out
|
||||||
# @go tool cover -func=coverage.out | awk -v target=80.0% \
|
@go tool cover -func=coverage.out | awk -v target=75.0% \
|
||||||
'/^total:/ { print "Total coverage: " $$3 " Minimum coverage: " target; if ($$3+0.0 >= target+0.0) print "ok"; else { print "fail"; exit 1; } }'
|
'/^total:/ { print "Total coverage: " $$3 " Minimum coverage: " target; if ($$3+0.0 >= target+0.0) print "ok"; else { print "fail"; exit 1; } }'
|
||||||
|
|
||||||
# Installs pre-commit hooks
|
# Installs pre-commit hooks
|
||||||
|
5
main.go
5
main.go
@ -168,8 +168,11 @@ func (job ContainerExecJob) Run() {
|
|||||||
job.context,
|
job.context,
|
||||||
execID.ID,
|
execID.ID,
|
||||||
)
|
)
|
||||||
|
slog.Debug("Exec info: %+v", execInfo)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
panic(err)
|
// Nothing we can do if we got an error here, so let's go
|
||||||
|
slog.WarnOnErr(err, "Could not get status for exec job %s", job.name)
|
||||||
|
return
|
||||||
}
|
}
|
||||||
time.Sleep(1 * time.Second)
|
time.Sleep(1 * time.Second)
|
||||||
}
|
}
|
||||||
|
165
main_test.go
165
main_test.go
@ -43,62 +43,19 @@ type FakeDockerClient struct {
|
|||||||
FakeCalls map[string][]FakeCall
|
FakeCalls map[string][]FakeCall
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// AssertFakeCalls checks expected against actual calls to fake methods
|
||||||
func (fakeClient FakeDockerClient) AssertFakeCalls(t *testing.T, expectedCalls map[string][]FakeCall, message string) {
|
func (fakeClient FakeDockerClient) AssertFakeCalls(t *testing.T, expectedCalls map[string][]FakeCall, message string) {
|
||||||
if !reflect.DeepEqual(expectedCalls, fakeClient.FakeCalls) {
|
if !reflect.DeepEqual(fakeClient.FakeCalls, expectedCalls) {
|
||||||
t.Errorf(
|
t.Errorf(
|
||||||
"%s: Calls are not as expected. Expected %+v Actual %+v",
|
"%s: Expected and actual calls do not match. Expected %+v Actual %+v",
|
||||||
message,
|
message,
|
||||||
expectedCalls,
|
expectedCalls,
|
||||||
fakeClient.FakeCalls,
|
fakeClient.FakeCalls,
|
||||||
)
|
)
|
||||||
}
|
}
|
||||||
/*
|
|
||||||
* for method, calls := range fakeClient.FakeCalls {
|
|
||||||
* exCalls, ok := expectedCalls[method]
|
|
||||||
* if !ok {
|
|
||||||
* // We did not expect these calls
|
|
||||||
* t.Errorf(
|
|
||||||
* "%s: Calls made to %s but none expected. Actual %+v",
|
|
||||||
* message,
|
|
||||||
* method,
|
|
||||||
* calls,
|
|
||||||
* )
|
|
||||||
* }
|
|
||||||
* if len(calls) != len(exCalls) {
|
|
||||||
* t.Errorf(
|
|
||||||
* "%s: Number of calls to %s are not as expected. Expected %+v Actual %+v",
|
|
||||||
* message,
|
|
||||||
* method,
|
|
||||||
* exCalls,
|
|
||||||
* calls,
|
|
||||||
* )
|
|
||||||
* }
|
|
||||||
*
|
|
||||||
* #<{(|
|
|
||||||
* * for i, call := range calls {
|
|
||||||
* * exCall := exCalls[i]
|
|
||||||
* * if call != exCall {
|
|
||||||
* *
|
|
||||||
* * }
|
|
||||||
* * }
|
|
||||||
* |)}>#
|
|
||||||
*
|
|
||||||
* if !reflect.DeepEqual(calls, exCalls) {
|
|
||||||
* // The calls to the method aren't what we expected
|
|
||||||
* t.Errorf(
|
|
||||||
* "%s: Calls to %s are not as expected. Expected %+v Actual %+v",
|
|
||||||
* message,
|
|
||||||
* method,
|
|
||||||
* exCalls,
|
|
||||||
* calls,
|
|
||||||
* )
|
|
||||||
* }
|
|
||||||
* // Remove method from expected calls so we can see if any weren't called later
|
|
||||||
* delete(expectedCalls, method)
|
|
||||||
* }
|
|
||||||
*/
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// called is a helper method to get return values and log the method call
|
||||||
func (fakeClient *FakeDockerClient) called(method string, v ...interface{}) FakeResult {
|
func (fakeClient *FakeDockerClient) called(method string, v ...interface{}) FakeResult {
|
||||||
if fakeClient.FakeCalls == nil {
|
if fakeClient.FakeCalls == nil {
|
||||||
fakeClient.FakeCalls = map[string][]FakeCall{}
|
fakeClient.FakeCalls = map[string][]FakeCall{}
|
||||||
@ -800,6 +757,86 @@ func TestRunExecJobs(t *testing.T) {
|
|||||||
},
|
},
|
||||||
expectPanic: true,
|
expectPanic: true,
|
||||||
},
|
},
|
||||||
|
{
|
||||||
|
name: "Successfully start an exec job fail on status",
|
||||||
|
client: &FakeDockerClient{
|
||||||
|
FakeResults: map[string][]FakeResult{
|
||||||
|
"ContainerInspect": []FakeResult{
|
||||||
|
FakeResult{runningContainerInfo, nil},
|
||||||
|
},
|
||||||
|
"ContainerExecCreate": []FakeResult{
|
||||||
|
FakeResult{dockerTypes.IDResponse{ID: "id"}, nil},
|
||||||
|
},
|
||||||
|
"ContainerExecStart": []FakeResult{
|
||||||
|
FakeResult{nil},
|
||||||
|
},
|
||||||
|
"ContainerExecInspect": []FakeResult{
|
||||||
|
FakeResult{nil, fmt.Errorf("fail")},
|
||||||
|
},
|
||||||
|
},
|
||||||
|
},
|
||||||
|
expectedCalls: map[string][]FakeCall{
|
||||||
|
"ContainerInspect": []FakeCall{
|
||||||
|
FakeCall{jobContext, jobContainerID},
|
||||||
|
},
|
||||||
|
"ContainerExecCreate": []FakeCall{
|
||||||
|
FakeCall{
|
||||||
|
jobContext,
|
||||||
|
jobContainerID,
|
||||||
|
dockerTypes.ExecConfig{
|
||||||
|
Cmd: []string{"sh", "-c", jobCommand},
|
||||||
|
},
|
||||||
|
},
|
||||||
|
},
|
||||||
|
"ContainerExecStart": []FakeCall{
|
||||||
|
FakeCall{jobContext, "id", dockerTypes.ExecStartCheck{}},
|
||||||
|
},
|
||||||
|
"ContainerExecInspect": []FakeCall{
|
||||||
|
FakeCall{jobContext, "id"},
|
||||||
|
},
|
||||||
|
},
|
||||||
|
},
|
||||||
|
{
|
||||||
|
name: "Successfully start an exec job and run to completion",
|
||||||
|
client: &FakeDockerClient{
|
||||||
|
FakeResults: map[string][]FakeResult{
|
||||||
|
"ContainerInspect": []FakeResult{
|
||||||
|
FakeResult{runningContainerInfo, nil},
|
||||||
|
},
|
||||||
|
"ContainerExecCreate": []FakeResult{
|
||||||
|
FakeResult{dockerTypes.IDResponse{ID: "id"}, nil},
|
||||||
|
},
|
||||||
|
"ContainerExecStart": []FakeResult{
|
||||||
|
FakeResult{nil},
|
||||||
|
},
|
||||||
|
"ContainerExecInspect": []FakeResult{
|
||||||
|
FakeResult{dockerTypes.ContainerExecInspect{Running: true}, nil},
|
||||||
|
FakeResult{dockerTypes.ContainerExecInspect{Running: false}, nil},
|
||||||
|
},
|
||||||
|
},
|
||||||
|
},
|
||||||
|
expectedCalls: map[string][]FakeCall{
|
||||||
|
"ContainerInspect": []FakeCall{
|
||||||
|
FakeCall{jobContext, jobContainerID},
|
||||||
|
},
|
||||||
|
"ContainerExecCreate": []FakeCall{
|
||||||
|
FakeCall{
|
||||||
|
jobContext,
|
||||||
|
jobContainerID,
|
||||||
|
dockerTypes.ExecConfig{
|
||||||
|
Cmd: []string{"sh", "-c", jobCommand},
|
||||||
|
},
|
||||||
|
},
|
||||||
|
},
|
||||||
|
"ContainerExecStart": []FakeCall{
|
||||||
|
FakeCall{jobContext, "id", dockerTypes.ExecStartCheck{}},
|
||||||
|
},
|
||||||
|
"ContainerExecInspect": []FakeCall{
|
||||||
|
FakeCall{jobContext, "id"},
|
||||||
|
FakeCall{jobContext, "id"},
|
||||||
|
},
|
||||||
|
},
|
||||||
|
},
|
||||||
}
|
}
|
||||||
|
|
||||||
for _, c := range cases {
|
for _, c := range cases {
|
||||||
@ -819,7 +856,10 @@ func TestRunExecJobs(t *testing.T) {
|
|||||||
|
|
||||||
defer func() {
|
defer func() {
|
||||||
// Recover from panics, if there were any
|
// Recover from panics, if there were any
|
||||||
recover()
|
if err := recover(); err != nil {
|
||||||
|
t.Log("Recovered from panic")
|
||||||
|
t.Log(err)
|
||||||
|
}
|
||||||
c.client.AssertFakeCalls(t, c.expectedCalls, "Failed")
|
c.client.AssertFakeCalls(t, c.expectedCalls, "Failed")
|
||||||
}()
|
}()
|
||||||
job.Run()
|
job.Run()
|
||||||
@ -866,10 +906,7 @@ func TestRunStartJobs(t *testing.T) {
|
|||||||
client: &FakeDockerClient{
|
client: &FakeDockerClient{
|
||||||
FakeResults: map[string][]FakeResult{
|
FakeResults: map[string][]FakeResult{
|
||||||
"ContainerInspect": []FakeResult{
|
"ContainerInspect": []FakeResult{
|
||||||
FakeResult{
|
FakeResult{runningContainerInfo, nil},
|
||||||
runningContainerInfo,
|
|
||||||
nil,
|
|
||||||
},
|
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
@ -884,12 +921,8 @@ func TestRunStartJobs(t *testing.T) {
|
|||||||
client: &FakeDockerClient{
|
client: &FakeDockerClient{
|
||||||
FakeResults: map[string][]FakeResult{
|
FakeResults: map[string][]FakeResult{
|
||||||
"ContainerInspect": []FakeResult{
|
"ContainerInspect": []FakeResult{
|
||||||
FakeResult{
|
FakeResult{stoppedContainerInfo, nil},
|
||||||
stoppedContainerInfo,
|
|
||||||
nil,
|
|
||||||
},
|
|
||||||
},
|
},
|
||||||
// "ContainerStart": []FakeResult{FakeResult{nil}},
|
|
||||||
"ContainerStart": []FakeResult{FakeResult{fmt.Errorf("fail")}},
|
"ContainerStart": []FakeResult{FakeResult{fmt.Errorf("fail")}},
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
@ -907,18 +940,9 @@ func TestRunStartJobs(t *testing.T) {
|
|||||||
client: &FakeDockerClient{
|
client: &FakeDockerClient{
|
||||||
FakeResults: map[string][]FakeResult{
|
FakeResults: map[string][]FakeResult{
|
||||||
"ContainerInspect": []FakeResult{
|
"ContainerInspect": []FakeResult{
|
||||||
FakeResult{
|
FakeResult{stoppedContainerInfo, nil},
|
||||||
stoppedContainerInfo,
|
FakeResult{runningContainerInfo, nil},
|
||||||
nil,
|
FakeResult{stoppedContainerInfo, nil},
|
||||||
},
|
|
||||||
FakeResult{
|
|
||||||
runningContainerInfo,
|
|
||||||
nil,
|
|
||||||
},
|
|
||||||
FakeResult{
|
|
||||||
stoppedContainerInfo,
|
|
||||||
nil,
|
|
||||||
},
|
|
||||||
},
|
},
|
||||||
"ContainerStart": []FakeResult{FakeResult{nil}},
|
"ContainerStart": []FakeResult{FakeResult{nil}},
|
||||||
},
|
},
|
||||||
@ -952,11 +976,8 @@ func TestRunStartJobs(t *testing.T) {
|
|||||||
// Recover from panics, if there were any
|
// Recover from panics, if there were any
|
||||||
recover()
|
recover()
|
||||||
c.client.AssertFakeCalls(t, c.expectedCalls, "Failed")
|
c.client.AssertFakeCalls(t, c.expectedCalls, "Failed")
|
||||||
// ErrorUnequal(t, c.expectedCalls, c.client.FakeCalls, "Unexpected calls")
|
|
||||||
}()
|
}()
|
||||||
|
|
||||||
job.Run()
|
job.Run()
|
||||||
|
|
||||||
if c.expectPanic {
|
if c.expectPanic {
|
||||||
t.Errorf("Expected panic but got none")
|
t.Errorf("Expected panic but got none")
|
||||||
}
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user