dicker
Version:
Dicker - Trivial docker build system
673 lines (668 loc) • 20.3 kB
JavaScript
/* eslint-disable max-len */
/**
* TODO: Port tests
*/
describe('smoke', () => {
test('test', () => {
expect(true).toEqual(true);
});
});
// package reference
//
// import (
// _ "crypto/sha256"
// _ "crypto/sha512"
// "encoding/json"
// "strconv"
// "strings"
// "testing"
//
// "github.com/opencontainers/go-digest"
// )
//
// func TestReferenceParse(t *testing.T) {
// // referenceTestcases is a unified set of testcases for
// // testing the parsing of references
// referenceTestcases := []struct {
// // input is the repository name or name component testcase
// input string
// // err is the error expected from Parse, or nil
// err error
// // repository is the string representation for the reference
// repository string
// // domain is the domain expected in the reference
// domain string
// // tag is the tag for the reference
// tag string
// // digest is the digest for the reference (enforces digest reference)
// digest string
// }{
// {
// input: "test_com",
// repository: "test_com",
// },
// {
// input: "test.com:tag",
// repository: "test.com",
// tag: "tag",
// },
// {
// input: "test.com:5000",
// repository: "test.com",
// tag: "5000",
// },
// {
// input: "test.com/repo:tag",
// domain: "test.com",
// repository: "test.com/repo",
// tag: "tag",
// },
// {
// input: "test:5000/repo",
// domain: "test:5000",
// repository: "test:5000/repo",
// },
// {
// input: "test:5000/repo:tag",
// domain: "test:5000",
// repository: "test:5000/repo",
// tag: "tag",
// },
// {
// input: "test:5000/repo@sha256:ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff",
// domain: "test:5000",
// repository: "test:5000/repo",
// digest: "sha256:ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff",
// },
// {
// input: "test:5000/repo:tag@sha256:ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff",
// domain: "test:5000",
// repository: "test:5000/repo",
// tag: "tag",
// digest: "sha256:ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff",
// },
// {
// input: "test:5000/repo",
// domain: "test:5000",
// repository: "test:5000/repo",
// },
// {
// input: "",
// err: ErrNameEmpty,
// },
// {
// input: ":justtag",
// err: ErrReferenceInvalidFormat,
// },
// {
// input: "@sha256:ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff",
// err: ErrReferenceInvalidFormat,
// },
// {
// input: "repo@sha256:ffffffffffffffffffffffffffffffffff",
// err: digest.ErrDigestInvalidLength,
// },
// {
// input: "validname@invaliddigest:ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff",
// err: digest.ErrDigestUnsupported,
// },
// {
// input: "Uppercase:tag",
// err: ErrNameContainsUppercase,
// },
// // FIXME "Uppercase" is incorrectly handled as a domain-name here, therefore passes.
// // See https://github.com/docker/distribution/pull/1778, and https://github.com/docker/docker/pull/20175
// //{
// // input: "Uppercase/lowercase:tag",
// // err: ErrNameContainsUppercase,
// //},
// {
// input: "test:5000/Uppercase/lowercase:tag",
// err: ErrNameContainsUppercase,
// },
// {
// input: "lowercase:Uppercase",
// repository: "lowercase",
// tag: "Uppercase",
// },
// {
// input: strings.Repeat("a/", 128) + "a:tag",
// err: ErrNameTooLong,
// },
// {
// input: strings.Repeat("a/", 127) + "a:tag-puts-this-over-max",
// domain: "a",
// repository: strings.Repeat("a/", 127) + "a",
// tag: "tag-puts-this-over-max",
// },
// {
// input: "aa/asdf$$^/aa",
// err: ErrReferenceInvalidFormat,
// },
// {
// input: "sub-dom1.foo.com/bar/baz/quux",
// domain: "sub-dom1.foo.com",
// repository: "sub-dom1.foo.com/bar/baz/quux",
// },
// {
// input: "sub-dom1.foo.com/bar/baz/quux:some-long-tag",
// domain: "sub-dom1.foo.com",
// repository: "sub-dom1.foo.com/bar/baz/quux",
// tag: "some-long-tag",
// },
// {
// input: "b.gcr.io/test.example.com/my-app:test.example.com",
// domain: "b.gcr.io",
// repository: "b.gcr.io/test.example.com/my-app",
// tag: "test.example.com",
// },
// {
// input: "xn--n3h.com/myimage:xn--n3h.com", // ☃.com in punycode
// domain: "xn--n3h.com",
// repository: "xn--n3h.com/myimage",
// tag: "xn--n3h.com",
// },
// {
// input: "xn--7o8h.com/myimage:xn--7o8h.com@sha512:ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff", // 🐳.com in punycode
// domain: "xn--7o8h.com",
// repository: "xn--7o8h.com/myimage",
// tag: "xn--7o8h.com",
// digest: "sha512:ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff",
// },
// {
// input: "foo_bar.com:8080",
// repository: "foo_bar.com",
// tag: "8080",
// },
// {
// input: "foo/foo_bar.com:8080",
// domain: "foo",
// repository: "foo/foo_bar.com",
// tag: "8080",
// },
// }
// for _, testcase := range referenceTestcases {
// failf := func(format string, v ...interface{}) {
// t.Logf(strconv.Quote(testcase.input)+": "+format, v...)
// t.Fail()
// }
//
// repo, err := Parse(testcase.input)
// if testcase.err != nil {
// if err == nil {
// failf("missing expected error: %v", testcase.err)
// } else if testcase.err != err {
// failf("mismatched error: got %v, expected %v", err, testcase.err)
// }
// continue
// } else if err != nil {
// failf("unexpected parse error: %v", err)
// continue
// }
// if repo.String() != testcase.input {
// failf("mismatched repo: got %q, expected %q", repo.String(), testcase.input)
// }
//
// if named, ok := repo.(Named); ok {
// if named.Name() != testcase.repository {
// failf("unexpected repository: got %q, expected %q", named.Name(), testcase.repository)
// }
// domain, _ := SplitHostname(named)
// if domain != testcase.domain {
// failf("unexpected domain: got %q, expected %q", domain, testcase.domain)
// }
// } else if testcase.repository != "" || testcase.domain != "" {
// failf("expected named type, got %T", repo)
// }
//
// tagged, ok := repo.(Tagged)
// if testcase.tag != "" {
// if ok {
// if tagged.Tag() != testcase.tag {
// failf("unexpected tag: got %q, expected %q", tagged.Tag(), testcase.tag)
// }
// } else {
// failf("expected tagged type, got %T", repo)
// }
// } else if ok {
// failf("unexpected tagged type")
// }
//
// digested, ok := repo.(Digested)
// if testcase.digest != "" {
// if ok {
// if digested.Digest().String() != testcase.digest {
// failf("unexpected digest: got %q, expected %q", digested.Digest().String(), testcase.digest)
// }
// } else {
// failf("expected digested type, got %T", repo)
// }
// } else if ok {
// failf("unexpected digested type")
// }
//
// }
// }
//
// // TestWithNameFailure tests cases where WithName should fail. Cases where it
// // should succeed are covered by TestSplitHostname, below.
// func TestWithNameFailure(t *testing.T) {
// testcases := []struct {
// input string
// err error
// }{
// {
// input: "",
// err: ErrNameEmpty,
// },
// {
// input: ":justtag",
// err: ErrReferenceInvalidFormat,
// },
// {
// input: "@sha256:ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff",
// err: ErrReferenceInvalidFormat,
// },
// {
// input: "validname@invaliddigest:ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff",
// err: ErrReferenceInvalidFormat,
// },
// {
// input: strings.Repeat("a/", 128) + "a:tag",
// err: ErrNameTooLong,
// },
// {
// input: "aa/asdf$$^/aa",
// err: ErrReferenceInvalidFormat,
// },
// }
// for _, testcase := range testcases {
// failf := func(format string, v ...interface{}) {
// t.Logf(strconv.Quote(testcase.input)+": "+format, v...)
// t.Fail()
// }
//
// _, err := WithName(testcase.input)
// if err == nil {
// failf("no error parsing name. expected: %s", testcase.err)
// }
// }
// }
//
// func TestSplitHostname(t *testing.T) {
// testcases := []struct {
// input string
// domain string
// name string
// }{
// {
// input: "test.com/foo",
// domain: "test.com",
// name: "foo",
// },
// {
// input: "test_com/foo",
// domain: "",
// name: "test_com/foo",
// },
// {
// input: "test:8080/foo",
// domain: "test:8080",
// name: "foo",
// },
// {
// input: "test.com:8080/foo",
// domain: "test.com:8080",
// name: "foo",
// },
// {
// input: "test-com:8080/foo",
// domain: "test-com:8080",
// name: "foo",
// },
// {
// input: "xn--n3h.com:18080/foo",
// domain: "xn--n3h.com:18080",
// name: "foo",
// },
// }
// for _, testcase := range testcases {
// failf := func(format string, v ...interface{}) {
// t.Logf(strconv.Quote(testcase.input)+": "+format, v...)
// t.Fail()
// }
//
// named, err := WithName(testcase.input)
// if err != nil {
// failf("error parsing name: %s", err)
// }
// domain, name := SplitHostname(named)
// if domain != testcase.domain {
// failf("unexpected domain: got %q, expected %q", domain, testcase.domain)
// }
// if name != testcase.name {
// failf("unexpected name: got %q, expected %q", name, testcase.name)
// }
// }
// }
//
// type serializationType struct {
// Description string
// Field Field
// }
//
// func TestSerialization(t *testing.T) {
// testcases := []struct {
// description string
// input string
// name string
// tag string
// digest string
// err error
// }{
// {
// description: "empty value",
// err: ErrNameEmpty,
// },
// {
// description: "just a name",
// input: "example.com:8000/named",
// name: "example.com:8000/named",
// },
// {
// description: "name with a tag",
// input: "example.com:8000/named:tagged",
// name: "example.com:8000/named",
// tag: "tagged",
// },
// {
// description: "name with digest",
// input: "other.com/named@sha256:1234567890098765432112345667890098765432112345667890098765432112",
// name: "other.com/named",
// digest: "sha256:1234567890098765432112345667890098765432112345667890098765432112",
// },
// }
// for _, testcase := range testcases {
// failf := func(format string, v ...interface{}) {
// t.Logf(strconv.Quote(testcase.input)+": "+format, v...)
// t.Fail()
// }
//
// m := map[string]string{
// "Description": testcase.description,
// "Field": testcase.input,
// }
// b, err := json.Marshal(m)
// if err != nil {
// failf("error marshalling: %v", err)
// }
// t := serializationType{}
//
// if err := json.Unmarshal(b, &t); err != nil {
// if testcase.err == nil {
// failf("error unmarshalling: %v", err)
// }
// if err != testcase.err {
// failf("wrong error, expected %v, got %v", testcase.err, err)
// }
//
// continue
// } else if testcase.err != nil {
// failf("expected error unmarshalling: %v", testcase.err)
// }
//
// if t.Description != testcase.description {
// failf("wrong description, expected %q, got %q", testcase.description, t.Description)
// }
//
// ref := t.Field.Reference()
//
// if named, ok := ref.(Named); ok {
// if named.Name() != testcase.name {
// failf("unexpected repository: got %q, expected %q", named.Name(), testcase.name)
// }
// } else if testcase.name != "" {
// failf("expected named type, got %T", ref)
// }
//
// tagged, ok := ref.(Tagged)
// if testcase.tag != "" {
// if ok {
// if tagged.Tag() != testcase.tag {
// failf("unexpected tag: got %q, expected %q", tagged.Tag(), testcase.tag)
// }
// } else {
// failf("expected tagged type, got %T", ref)
// }
// } else if ok {
// failf("unexpected tagged type")
// }
//
// digested, ok := ref.(Digested)
// if testcase.digest != "" {
// if ok {
// if digested.Digest().String() != testcase.digest {
// failf("unexpected digest: got %q, expected %q", digested.Digest().String(), testcase.digest)
// }
// } else {
// failf("expected digested type, got %T", ref)
// }
// } else if ok {
// failf("unexpected digested type")
// }
//
// t = serializationType{
// Description: testcase.description,
// Field: AsField(ref),
// }
//
// b2, err := json.Marshal(t)
// if err != nil {
// failf("error marshing serialization type: %v", err)
// }
//
// if string(b) != string(b2) {
// failf("unexpected serialized value: expected %q, got %q", string(b), string(b2))
// }
//
// // Ensure t.Field is not implementing "Reference" directly, getting
// // around the Reference type system
// var fieldInterface interface{} = t.Field
// if _, ok := fieldInterface.(Reference); ok {
// failf("field should not implement Reference interface")
// }
//
// }
// }
//
// func TestWithTag(t *testing.T) {
// testcases := []struct {
// name string
// digest digest.Digest
// tag string
// combined string
// }{
// {
// name: "test.com/foo",
// tag: "tag",
// combined: "test.com/foo:tag",
// },
// {
// name: "foo",
// tag: "tag2",
// combined: "foo:tag2",
// },
// {
// name: "test.com:8000/foo",
// tag: "tag4",
// combined: "test.com:8000/foo:tag4",
// },
// {
// name: "test.com:8000/foo",
// tag: "TAG5",
// combined: "test.com:8000/foo:TAG5",
// },
// {
// name: "test.com:8000/foo",
// digest: "sha256:1234567890098765432112345667890098765",
// tag: "TAG5",
// combined: "test.com:8000/foo:TAG5@sha256:1234567890098765432112345667890098765",
// },
// }
// for _, testcase := range testcases {
// failf := func(format string, v ...interface{}) {
// t.Logf(strconv.Quote(testcase.name)+": "+format, v...)
// t.Fail()
// }
//
// named, err := WithName(testcase.name)
// if err != nil {
// failf("error parsing name: %s", err)
// }
// if testcase.digest != "" {
// canonical, err := WithDigest(named, testcase.digest)
// if err != nil {
// failf("error adding digest")
// }
// named = canonical
// }
//
// tagged, err := WithTag(named, testcase.tag)
// if err != nil {
// failf("WithTag failed: %s", err)
// }
// if tagged.String() != testcase.combined {
// failf("unexpected: got %q, expected %q", tagged.String(), testcase.combined)
// }
// }
// }
//
// func TestWithDigest(t *testing.T) {
// testcases := []struct {
// name string
// digest digest.Digest
// tag string
// combined string
// }{
// {
// name: "test.com/foo",
// digest: "sha256:1234567890098765432112345667890098765",
// combined: "test.com/foo@sha256:1234567890098765432112345667890098765",
// },
// {
// name: "foo",
// digest: "sha256:1234567890098765432112345667890098765",
// combined: "foo@sha256:1234567890098765432112345667890098765",
// },
// {
// name: "test.com:8000/foo",
// digest: "sha256:1234567890098765432112345667890098765",
// combined: "test.com:8000/foo@sha256:1234567890098765432112345667890098765",
// },
// {
// name: "test.com:8000/foo",
// digest: "sha256:1234567890098765432112345667890098765",
// tag: "latest",
// combined: "test.com:8000/foo:latest@sha256:1234567890098765432112345667890098765",
// },
// }
// for _, testcase := range testcases {
// failf := func(format string, v ...interface{}) {
// t.Logf(strconv.Quote(testcase.name)+": "+format, v...)
// t.Fail()
// }
//
// named, err := WithName(testcase.name)
// if err != nil {
// failf("error parsing name: %s", err)
// }
// if testcase.tag != "" {
// tagged, err := WithTag(named, testcase.tag)
// if err != nil {
// failf("error adding tag")
// }
// named = tagged
// }
// digested, err := WithDigest(named, testcase.digest)
// if err != nil {
// failf("WithDigest failed: %s", err)
// }
// if digested.String() != testcase.combined {
// failf("unexpected: got %q, expected %q", digested.String(), testcase.combined)
// }
// }
// }
//
// func TestParseNamed(t *testing.T) {
// testcases := []struct {
// input string
// domain string
// name string
// err error
// }{
// {
// input: "test.com/foo",
// domain: "test.com",
// name: "foo",
// },
// {
// input: "test:8080/foo",
// domain: "test:8080",
// name: "foo",
// },
// {
// input: "test_com/foo",
// err: ErrNameNotCanonical,
// },
// {
// input: "test.com",
// err: ErrNameNotCanonical,
// },
// {
// input: "foo",
// err: ErrNameNotCanonical,
// },
// {
// input: "library/foo",
// err: ErrNameNotCanonical,
// },
// {
// input: "docker.io/library/foo",
// domain: "docker.io",
// name: "library/foo",
// },
// // Ambiguous case, parser will add "library/" to foo
// {
// input: "docker.io/foo",
// err: ErrNameNotCanonical,
// },
// }
// for _, testcase := range testcases {
// failf := func(format string, v ...interface{}) {
// t.Logf(strconv.Quote(testcase.input)+": "+format, v...)
// t.Fail()
// }
//
// named, err := ParseNamed(testcase.input)
// if err != nil && testcase.err == nil {
// failf("error parsing name: %s", err)
// continue
// } else if err == nil && testcase.err != nil {
// failf("parsing succeded: expected error %v", testcase.err)
// continue
// } else if err != testcase.err {
// failf("unexpected error %v, expected %v", err, testcase.err)
// continue
// } else if err != nil {
// continue
// }
//
// domain, name := SplitHostname(named)
// if domain != testcase.domain {
// failf("unexpected domain: got %q, expected %q", domain, testcase.domain)
// }
// if name != testcase.name {
// failf("unexpected name: got %q, expected %q", name, testcase.name)
// }
// }
// }