123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116 |
- package docker
- import (
- "fmt"
- "io/ioutil"
- "testing"
- )
- // mkTestContext generates a build context from the contents of the provided dockerfile.
- // This context is suitable for use as an argument to BuildFile.Build()
- func mkTestContext(dockerfile string, files [][2]string, t *testing.T) Archive {
- context, err := mkBuildContext(fmt.Sprintf(dockerfile, unitTestImageId), files)
- if err != nil {
- t.Fatal(err)
- }
- return context
- }
- // A testContextTemplate describes a build context and how to test it
- type testContextTemplate struct {
- // Contents of the Dockerfile
- dockerfile string
- // Additional files in the context, eg [][2]string{"./passwd", "gordon"}
- files [][2]string
- }
- // A table of all the contexts to build and test.
- // A new docker runtime will be created and torn down for each context.
- var testContexts []testContextTemplate = []testContextTemplate{
- {
- `
- from %s
- run sh -c 'echo root:testpass > /tmp/passwd'
- run mkdir -p /var/run/sshd
- run [ "$(cat /tmp/passwd)" = "root:testpass" ]
- run [ "$(ls -d /var/run/sshd)" = "/var/run/sshd" ]
- `,
- nil,
- },
- {
- `
- from %s
- add foo /usr/lib/bla/bar
- run [ "$(cat /usr/lib/bla/bar)" = 'hello world!' ]
- `,
- [][2]string{{"foo", "hello world!"}},
- },
- {
- `
- from %s
- add f /
- run [ "$(cat /f)" = "hello" ]
- add f /abc
- run [ "$(cat /abc)" = "hello" ]
- add f /x/y/z
- run [ "$(cat /x/y/z)" = "hello" ]
- add f /x/y/d/
- run [ "$(cat /x/y/d/f)" = "hello" ]
- add d /
- run [ "$(cat /ga)" = "bu" ]
- add d /somewhere
- run [ "$(cat /somewhere/ga)" = "bu" ]
- add d /anotherplace/
- run [ "$(cat /anotherplace/ga)" = "bu" ]
- add d /somewheeeere/over/the/rainbooow
- run [ "$(cat /somewheeeere/over/the/rainbooow/ga)" = "bu" ]
- `,
- [][2]string{
- {"f", "hello"},
- {"d/ga", "bu"},
- },
- },
- {
- `
- from %s
- env FOO BAR
- run [ "$FOO" = "BAR" ]
- `,
- nil,
- },
- {
- `
- from docker-ut
- ENTRYPOINT /bin/echo
- CMD Hello world
- `,
- nil,
- },
- }
- // FIXME: test building with 2 successive overlapping ADD commands
- func TestBuild(t *testing.T) {
- for _, ctx := range testContexts {
- runtime, err := newTestRuntime()
- if err != nil {
- t.Fatal(err)
- }
- defer nuke(runtime)
- srv := &Server{
- runtime: runtime,
- pullingPool: make(map[string]struct{}),
- pushingPool: make(map[string]struct{}),
- }
- buildfile := NewBuildFile(srv, ioutil.Discard)
- if _, err := buildfile.Build(mkTestContext(ctx.dockerfile, ctx.files, t)); err != nil {
- t.Fatal(err)
- }
- }
- }
|