From 25c14cce30425a29ac2d2c5be64d22966e0e38ff Mon Sep 17 00:00:00 2001 From: Sven Dowideit Date: Wed, 30 Apr 2014 10:12:21 +1000 Subject: [PATCH 1/3] for want of a comma, the kingdom was lost Docker-DCO-1.1-Signed-off-by: Sven Dowideit (github: SvenDowideit) Upstream-commit: 9e2e26c69a52c0b55d31de477a652731f87b4558 Component: engine --- components/engine/docs/s3_website.json | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/components/engine/docs/s3_website.json b/components/engine/docs/s3_website.json index 89e3ecd3cf..fb14628ce6 100644 --- a/components/engine/docs/s3_website.json +++ b/components/engine/docs/s3_website.json @@ -9,9 +9,9 @@ { "Condition": { "KeyPrefixEquals": "en/latest/" }, "Redirect": { "ReplaceKeyPrefixWith": "" } }, { "Condition": { "KeyPrefixEquals": "en/master/" }, "Redirect": { "ReplaceKeyPrefixWith": "" } }, { "Condition": { "KeyPrefixEquals": "en/v0.6.3/" }, "Redirect": { "ReplaceKeyPrefixWith": "" } }, - { "Condition": { "KeyPrefixEquals": "jsearch/index.html" }, "Redirect": { "ReplaceKeyPrefixWith": "jsearch/" } } + { "Condition": { "KeyPrefixEquals": "jsearch/index.html" }, "Redirect": { "ReplaceKeyPrefixWith": "jsearch/" } }, { "Condition": { "KeyPrefixEquals": "index/" }, "Redirect": { "ReplaceKeyPrefixWith": "docker-io/" } }, - { "Condition": { "KeyPrefixEquals": "reference/api/index_api/" }, "Redirect": { "ReplaceKeyPrefixWith": "reference/api/docker-io_api/" } }, + { "Condition": { "KeyPrefixEquals": "reference/api/index_api/" }, "Redirect": { "ReplaceKeyPrefixWith": "reference/api/docker-io_api/" } } ] } From bbcaf9ab18c4b964b34dc1ac36a91dc2d7d7202b Mon Sep 17 00:00:00 2001 From: Victor Marmol Date: Tue, 29 Apr 2014 22:49:03 +0000 Subject: [PATCH 2/3] Add new test-unit make rule which only runs the unit tests. Renames test bundle to test-unit. Docker-DCO-1.1-Signed-off-by: Victor Marmol (github: vmarmol) Upstream-commit: 494c789ac34d3f22d5f6275937155e0aa2647374 Component: engine --- components/engine/Makefile | 7 +++++-- components/engine/hack/make.sh | 2 +- components/engine/hack/make/{test => test-unit} | 6 +++--- components/engine/hack/release.sh | 2 +- 4 files changed, 10 insertions(+), 7 deletions(-) rename components/engine/hack/make/{test => test-unit} (92%) diff --git a/components/engine/Makefile b/components/engine/Makefile index 5945dc2737..a4c8658e08 100644 --- a/components/engine/Makefile +++ b/components/engine/Makefile @@ -1,4 +1,4 @@ -.PHONY: all binary build cross default docs docs-build docs-shell shell test test-integration test-integration-cli validate +.PHONY: all binary build cross default docs docs-build docs-shell shell test test-unit test-integration test-integration-cli validate # to allow `make BINDDIR=. shell` or `make BINDDIR= test` BINDDIR := bundles @@ -35,7 +35,10 @@ docs-release: docs-build $(DOCKER_RUN_DOCS) "$(DOCKER_DOCS_IMAGE)" ./release.sh test: build - $(DOCKER_RUN_DOCKER) hack/make.sh binary test test-integration test-integration-cli + $(DOCKER_RUN_DOCKER) hack/make.sh binary test-unit test-integration test-integration-cli + +test-unit: build + $(DOCKER_RUN_DOCKER) hack/make.sh test-unit test-integration: build $(DOCKER_RUN_DOCKER) hack/make.sh test-integration diff --git a/components/engine/hack/make.sh b/components/engine/hack/make.sh index 46df398c57..8636756c87 100755 --- a/components/engine/hack/make.sh +++ b/components/engine/hack/make.sh @@ -45,7 +45,7 @@ DEFAULT_BUNDLES=( binary - test + test-unit test-integration test-integration-cli diff --git a/components/engine/hack/make/test b/components/engine/hack/make/test-unit similarity index 92% rename from components/engine/hack/make/test rename to components/engine/hack/make/test-unit index 828fdf6efd..066865859c 100644 --- a/components/engine/hack/make/test +++ b/components/engine/hack/make/test-unit @@ -11,9 +11,9 @@ TEXTRESET=$'\033[0m' # reset the foreground colour # If $TESTFLAGS is set in the environment, it is passed as extra arguments to 'go test'. # You can use this to select certain tests to run, eg. # -# TESTFLAGS='-run ^TestBuild$' ./hack/make.sh test +# TESTFLAGS='-run ^TestBuild$' ./hack/make.sh test-unit # -bundle_test() { +bundle_test_unit() { { date @@ -52,4 +52,4 @@ bundle_test() { } 2>&1 | tee $DEST/test.log } -bundle_test +bundle_test_unit diff --git a/components/engine/hack/release.sh b/components/engine/hack/release.sh index d77d454e27..8642a4edb9 100755 --- a/components/engine/hack/release.sh +++ b/components/engine/hack/release.sh @@ -54,7 +54,7 @@ RELEASE_BUNDLES=( if [ "$1" != '--release-regardless-of-test-failure' ]; then RELEASE_BUNDLES=( - test test-integration + test-unit test-integration "${RELEASE_BUNDLES[@]}" test-integration-cli ) From 23a6b19cdcc172dca1bdf548ce74b9e4137eb505 Mon Sep 17 00:00:00 2001 From: Alexander Larsson Date: Tue, 25 Mar 2014 13:19:41 +0100 Subject: [PATCH 3/3] beam: Add more tests to unix_test.go These are failing, and indicate things that need to be fixed. The primarily problem is the lack of framing between beam messages. Docker-DCO-1.1-Signed-off-by: Alexander Larsson (github: alexlarsson) [solomon@docker.com: rebased on master] Signed-off-by: Solomon Hykes Upstream-commit: e802b69146ac7a008d943a3a289fba56150b4f81 Component: engine --- components/engine/pkg/beam/unix_test.go | 151 ++++++++++++++++++++++++ 1 file changed, 151 insertions(+) diff --git a/components/engine/pkg/beam/unix_test.go b/components/engine/pkg/beam/unix_test.go index 09815aa0d6..976f089c23 100644 --- a/components/engine/pkg/beam/unix_test.go +++ b/components/engine/pkg/beam/unix_test.go @@ -25,6 +25,30 @@ func TestSocketPair(t *testing.T) { fmt.Printf("still open: %v\n", a.Fd()) } +func TestUSocketPair(t *testing.T) { + a, b, err := USocketPair() + if err != nil { + t.Fatal(err) + } + + data := "hello world!" + go func() { + a.Write([]byte(data)) + a.Close() + }() + res := make([]byte, 1024) + size, err := b.Read(res) + if err != nil { + t.Fatal(err) + } + if size != len(data) { + t.Fatal("Unexpected size") + } + if string(res[0:size]) != data { + t.Fatal("Unexpected data") + } +} + func TestSendUnixSocket(t *testing.T) { a1, a2, err := USocketPair() if err != nil { @@ -83,4 +107,131 @@ func TestSendUnixSocket(t *testing.T) { t.Fatal(err) } fmt.Printf("---> %s\n", data) + +} + +// Ensure we get proper segmenting of messages +func TestSendSegmenting(t *testing.T) { + a, b, err := USocketPair() + if err != nil { + t.Fatal(err) + } + defer a.Close() + defer b.Close() + + extrafd1, extrafd2, err := SocketPair() + if err != nil { + t.Fatal(err) + } + extrafd2.Close() + + go func() { + a.Send([]byte("message 1"), nil) + a.Send([]byte("message 2"), extrafd1) + a.Send([]byte("message 3"), nil) + }() + + msg1, file1, err := b.Receive() + if err != nil { + t.Fatal(err) + } + if string(msg1) != "message 1" { + t.Fatal("unexpected msg1:", string(msg1)) + } + if file1 != nil { + t.Fatal("unexpectedly got file1") + } + + msg2, file2, err := b.Receive() + if err != nil { + t.Fatal(err) + } + if string(msg2) != "message 2" { + t.Fatal("unexpected msg2:", string(msg2)) + } + if file2 == nil { + t.Fatal("didn't get file2") + } + file2.Close() + + msg3, file3, err := b.Receive() + if err != nil { + t.Fatal(err) + } + if string(msg3) != "message 3" { + t.Fatal("unexpected msg3:", string(msg3)) + } + if file3 != nil { + t.Fatal("unexpectedly got file3") + } + +} + +// Test sending a zero byte message +func TestSendEmpty(t *testing.T) { + a, b, err := USocketPair() + if err != nil { + t.Fatal(err) + } + defer a.Close() + defer b.Close() + go func() { + a.Send([]byte{}, nil) + }() + + msg, file, err := b.Receive() + if err != nil { + t.Fatal(err) + } + if len(msg) != 0 { + t.Fatalf("unexpected non-empty message: %v", msg) + } + if file != nil { + t.Fatal("unexpectedly got file") + } + +} + +func makeLarge(size int) []byte { + res := make([]byte, size) + for i := range res { + res[i] = byte(i % 255) + } + return res +} + +func verifyLarge(data []byte, size int) bool { + if len(data) != size { + return false + } + for i := range data { + if data[i] != byte(i%255) { + return false + } + } + return true +} + +// Test sending a large message +func TestSendLarge(t *testing.T) { + a, b, err := USocketPair() + if err != nil { + t.Fatal(err) + } + defer a.Close() + defer b.Close() + go func() { + a.Send(makeLarge(100000), nil) + }() + + msg, file, err := b.Receive() + if err != nil { + t.Fatal(err) + } + if !verifyLarge(msg, 100000) { + t.Fatalf("unexpected message (size %d)", len(msg)) + } + if file != nil { + t.Fatal("unexpectedly got file") + } }