github.com/containerd/nerdctl/v2@v2.0.0-beta.5.0.20240520001846-b5758f54fa28/pkg/composer/serviceparser/build_test.go (about)

     1  /*
     2     Copyright The containerd Authors.
     3  
     4     Licensed under the Apache License, Version 2.0 (the "License");
     5     you may not use this file except in compliance with the License.
     6     You may obtain a copy of the License at
     7  
     8         http://www.apache.org/licenses/LICENSE-2.0
     9  
    10     Unless required by applicable law or agreed to in writing, software
    11     distributed under the License is distributed on an "AS IS" BASIS,
    12     WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
    13     See the License for the specific language governing permissions and
    14     limitations under the License.
    15  */
    16  
    17  package serviceparser
    18  
    19  import (
    20  	"testing"
    21  
    22  	"github.com/containerd/nerdctl/v2/pkg/composer/projectloader"
    23  	"github.com/containerd/nerdctl/v2/pkg/testutil"
    24  	"gotest.tools/v3/assert"
    25  )
    26  
    27  func lastOf(ss []string) string {
    28  	return ss[len(ss)-1]
    29  }
    30  
    31  func TestParseBuild(t *testing.T) {
    32  	t.Parallel()
    33  	const dockerComposeYAML = `
    34  services:
    35    foo:
    36      build: ./fooctx
    37      pull_policy: always
    38    bar:
    39      image: barimg
    40      pull_policy: build
    41      build:
    42        context: ./barctx
    43        target: bartgt
    44        labels:
    45          bar: baz
    46        secrets:
    47          - source: src_secret
    48            target: tgt_secret
    49          - simple_secret
    50          - absolute_secret
    51  secrets:
    52    src_secret:
    53      file: test_secret1
    54    simple_secret:
    55      file: test_secret2
    56    absolute_secret:
    57      file: /tmp/absolute_secret
    58  `
    59  	comp := testutil.NewComposeDir(t, dockerComposeYAML)
    60  	defer comp.CleanUp()
    61  
    62  	project, err := projectloader.Load(comp.YAMLFullPath(), comp.ProjectName(), nil)
    63  	assert.NilError(t, err)
    64  
    65  	fooSvc, err := project.GetService("foo")
    66  	assert.NilError(t, err)
    67  
    68  	foo, err := Parse(project, fooSvc)
    69  	assert.NilError(t, err)
    70  
    71  	t.Logf("foo: %+v", foo)
    72  	assert.Equal(t, DefaultImageName(project.Name, "foo"), foo.Image)
    73  	assert.Equal(t, false, foo.Build.Force)
    74  	assert.Equal(t, project.RelativePath("fooctx"), lastOf(foo.Build.BuildArgs))
    75  
    76  	barSvc, err := project.GetService("bar")
    77  	assert.NilError(t, err)
    78  
    79  	bar, err := Parse(project, barSvc)
    80  	assert.NilError(t, err)
    81  
    82  	t.Logf("bar: %+v", bar)
    83  	assert.Equal(t, "barimg", bar.Image)
    84  	assert.Equal(t, true, bar.Build.Force)
    85  	assert.Equal(t, project.RelativePath("barctx"), lastOf(bar.Build.BuildArgs))
    86  	assert.Assert(t, in(bar.Build.BuildArgs, "--target=bartgt"))
    87  	assert.Assert(t, in(bar.Build.BuildArgs, "--label=bar=baz"))
    88  	secretPath := project.WorkingDir
    89  	assert.Assert(t, in(bar.Build.BuildArgs, "--secret=id=tgt_secret,src="+secretPath+"/test_secret1"))
    90  	assert.Assert(t, in(bar.Build.BuildArgs, "--secret=id=simple_secret,src="+secretPath+"/test_secret2"))
    91  	assert.Assert(t, in(bar.Build.BuildArgs, "--secret=id=absolute_secret,src=/tmp/absolute_secret"))
    92  }