Add TestMQSC
This commit is contained in:
@@ -17,7 +17,7 @@ package main
|
|||||||
|
|
||||||
import (
|
import (
|
||||||
"context"
|
"context"
|
||||||
"strconv"
|
"fmt"
|
||||||
"strings"
|
"strings"
|
||||||
"testing"
|
"testing"
|
||||||
"time"
|
"time"
|
||||||
@@ -323,13 +323,41 @@ func TestZombies(t *testing.T) {
|
|||||||
t.Fatalf("Expected pkill to kill a process, got %v", out)
|
t.Fatalf("Expected pkill to kill a process, got %v", out)
|
||||||
}
|
}
|
||||||
time.Sleep(3 * time.Second)
|
time.Sleep(3 * time.Second)
|
||||||
// Create a zombie process for up to ten seconds
|
out = execContainerWithOutput(t, cli, id, "mqm", []string{"bash", "-c", "ps -lA | grep '^. Z'"})
|
||||||
out = execContainerWithOutput(t, cli, id, "mqm", []string{"bash", "-c", "ps -lA | grep '^. Z' | wc -l"})
|
if out != "" {
|
||||||
count, err := strconv.Atoi(out)
|
count := strings.Count(out, "\n") + 1
|
||||||
|
t.Errorf("Expected zombies=0, got %v", count)
|
||||||
|
t.Error(out)
|
||||||
|
t.Fail()
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// TestMQSC creates a new image with an MQSC file in, starts a container based
|
||||||
|
// on that image, and checks that the MQSC has been applied correctly.
|
||||||
|
func TestMQSC(t *testing.T) {
|
||||||
|
t.Parallel()
|
||||||
|
cli, err := client.NewEnvClient()
|
||||||
if err != nil {
|
if err != nil {
|
||||||
t.Fatal(err)
|
t.Fatal(err)
|
||||||
}
|
}
|
||||||
if count != 0 {
|
var files = []struct {
|
||||||
t.Fatalf("Expected zombies=0, got %v", count)
|
Name, Body string
|
||||||
|
}{
|
||||||
|
{"Dockerfile", fmt.Sprintf("FROM %v\nADD test.mqsc /etc/mqm/", imageName())},
|
||||||
|
{"test.mqsc", "DEFINE QLOCAL(test)"},
|
||||||
|
}
|
||||||
|
tag := createImage(t, cli, files)
|
||||||
|
defer deleteImage(t, cli, tag)
|
||||||
|
|
||||||
|
containerConfig := container.Config{
|
||||||
|
Env: []string{"LICENSE=accept", "MQ_QMGR_NAME=qm1"},
|
||||||
|
Image: tag,
|
||||||
|
}
|
||||||
|
id := runContainer(t, cli, &containerConfig)
|
||||||
|
defer cleanContainer(t, cli, id)
|
||||||
|
waitForReady(t, cli, id)
|
||||||
|
rc := execContainerWithExitCode(t, cli, id, "mqm", []string{"bash", "-c", "echo 'DISPLAY QLOCAL(test)' | runmqsc"})
|
||||||
|
if rc != 0 {
|
||||||
|
t.Fatalf("Expected runmqsc to exit with rc=0, got %v", rc)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -16,6 +16,7 @@ limitations under the License.
|
|||||||
package main
|
package main
|
||||||
|
|
||||||
import (
|
import (
|
||||||
|
"archive/tar"
|
||||||
"bytes"
|
"bytes"
|
||||||
"context"
|
"context"
|
||||||
"io/ioutil"
|
"io/ioutil"
|
||||||
@@ -338,3 +339,54 @@ func inspectLogs(t *testing.T, cli *client.Client, ID string) string {
|
|||||||
}
|
}
|
||||||
return buf.String()
|
return buf.String()
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// generateTAR creates a TAR-formatted []byte, with the specified files included.
|
||||||
|
func generateTAR(t *testing.T, files []struct{ Name, Body string }) []byte {
|
||||||
|
buf := new(bytes.Buffer)
|
||||||
|
tw := tar.NewWriter(buf)
|
||||||
|
for _, file := range files {
|
||||||
|
hdr := &tar.Header{
|
||||||
|
Name: file.Name,
|
||||||
|
Mode: 0600,
|
||||||
|
Size: int64(len(file.Body)),
|
||||||
|
}
|
||||||
|
err := tw.WriteHeader(hdr)
|
||||||
|
if err != nil {
|
||||||
|
t.Fatal(err)
|
||||||
|
}
|
||||||
|
_, err = tw.Write([]byte(file.Body))
|
||||||
|
if err != nil {
|
||||||
|
t.Fatal(err)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
err := tw.Close()
|
||||||
|
if err != nil {
|
||||||
|
t.Fatal(err)
|
||||||
|
}
|
||||||
|
return buf.Bytes()
|
||||||
|
}
|
||||||
|
|
||||||
|
// createImage creates a new Docker image with the specified files included.
|
||||||
|
func createImage(t *testing.T, cli *client.Client, files []struct{ Name, Body string }) string {
|
||||||
|
r := bytes.NewReader(generateTAR(t, files))
|
||||||
|
tag := strings.ToLower(t.Name())
|
||||||
|
buildOptions := types.ImageBuildOptions{
|
||||||
|
Context: r,
|
||||||
|
Tags: []string{tag},
|
||||||
|
}
|
||||||
|
resp, err := cli.ImageBuild(context.Background(), r, buildOptions)
|
||||||
|
if err != nil {
|
||||||
|
t.Fatal(err)
|
||||||
|
}
|
||||||
|
resp.Body.Close()
|
||||||
|
// Sleep for two seconds, to try and prevent "No such image" errors
|
||||||
|
time.Sleep(2 * time.Second)
|
||||||
|
return tag
|
||||||
|
}
|
||||||
|
|
||||||
|
// deleteImage deletes a Docker image
|
||||||
|
func deleteImage(t *testing.T, cli *client.Client, id string) {
|
||||||
|
cli.ImageRemove(context.Background(), id, types.ImageRemoveOptions{
|
||||||
|
Force: true,
|
||||||
|
})
|
||||||
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user