Skip to content

Commit c5db5c6

Browse files
authored
Merge pull request #43 from asalkeld/unit-test-build
Add more unit tests to build and functiondockerfile
2 parents 52b4145 + ca6e777 commit c5db5c6

File tree

12 files changed

+226
-211
lines changed

12 files changed

+226
-211
lines changed

pkg/build/build_test.go

Lines changed: 36 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -25,6 +25,8 @@ import (
2525

2626
"github.com/nitrictech/newcli/mocks/mock_containerengine"
2727
"github.com/nitrictech/newcli/pkg/containerengine"
28+
"github.com/nitrictech/newcli/pkg/stack"
29+
"github.com/nitrictech/newcli/pkg/target"
2830
)
2931

3032
func TestCreateBaseDev(t *testing.T) {
@@ -45,3 +47,37 @@ func TestCreateBaseDev(t *testing.T) {
4547
t.Errorf("CreateBaseDev() error = %v", err)
4648
}
4749
}
50+
51+
func TestCreate(t *testing.T) {
52+
ctrl := gomock.NewController(t)
53+
me := mock_containerengine.NewMockContainerEngine(ctrl)
54+
me.EXPECT().Build(gomock.Any(), "", "corp-abc-dev:123456", map[string]string{"PROVIDER": "aws"})
55+
me.EXPECT().Build("Dockerfile.custom", "", "corp-xyz-dev:444444", map[string]string{"PROVIDER": "aws"})
56+
57+
containerengine.MockEngine = me
58+
59+
s := &stack.Stack{
60+
Name: "test-stack",
61+
Functions: map[string]stack.Function{
62+
"list": {
63+
Handler: "functions/list.ts",
64+
ComputeUnit: stack.ComputeUnit{
65+
Tag: "corp-abc-dev:123456",
66+
},
67+
BuildScripts: []string{"ls"},
68+
},
69+
},
70+
Containers: map[string]stack.Container{
71+
"doit": {
72+
Dockerfile: "Dockerfile.custom",
73+
ComputeUnit: stack.ComputeUnit{
74+
Tag: "corp-xyz-dev:444444",
75+
},
76+
},
77+
},
78+
}
79+
80+
if err := Create(s, &target.Target{Provider: "aws", Region: "eastus"}); err != nil {
81+
t.Errorf("CreateBaseDev() error = %v", err)
82+
}
83+
}
Lines changed: 174 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,174 @@
1+
// Copyright Nitric Pty Ltd.
2+
//
3+
// SPDX-License-Identifier: Apache-2.0
4+
//
5+
// Licensed under the Apache License, Version 2.0 (the "License");
6+
// you may not use this file except in compliance with the License.
7+
// You may obtain a copy of the License at:
8+
//
9+
// http://www.apache.org/licenses/LICENSE-2.0
10+
//
11+
// Unless required by applicable law or agreed to in writing, software
12+
// distributed under the License is distributed on an "AS IS" BASIS,
13+
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
14+
// See the License for the specific language governing permissions and
15+
// limitations under the License.
16+
17+
package functiondockerfile
18+
19+
import (
20+
"bytes"
21+
"testing"
22+
23+
"github.com/google/go-cmp/cmp"
24+
25+
"github.com/nitrictech/newcli/pkg/stack"
26+
)
27+
28+
func TestGenerate(t *testing.T) {
29+
tests := []struct {
30+
name string
31+
f *stack.Function
32+
version string
33+
provider string
34+
wantFwriter string
35+
}{
36+
{
37+
name: "ts",
38+
f: &stack.Function{Handler: "functions/list.ts"},
39+
version: "latest",
40+
provider: "azure",
41+
wantFwriter: `FROM node:alpine
42+
RUN yarn global add typescript
43+
RUN yarn global add ts-node
44+
COPY package.json *.lock *-lock.json /
45+
RUN yarn import || echo Lockfile already exists
46+
RUN set -ex; yarn install --production --frozen-lockfile --cache-folder /tmp/.cache; rm -rf /tmp/.cache;
47+
ADD https://github.com/nitrictech/nitric/releases/latest/download/membrane-azure /usr/local/bin/membrane
48+
RUN chmod +x-rw /usr/local/bin/membrane
49+
ENTRYPOINT ["/usr/local/bin/membrane"]
50+
COPY . .
51+
CMD ["ts-node", "-T", "functions/list.ts"]`,
52+
},
53+
{
54+
name: "go",
55+
f: &stack.Function{Handler: "pkg/handler/list.go"},
56+
version: "v1.2.3",
57+
provider: "aws",
58+
wantFwriter: `FROM golang:alpine as build
59+
RUN apk update
60+
RUN apk upgrade
61+
RUN apk add --no-cache git gcc g++ make
62+
WORKDIR /app/
63+
COPY go.mod *.sum ./
64+
RUN go mod download
65+
COPY . .
66+
RUN CGO_ENABLED=0 GOOS=linux go build -o /bin/main pkg/handler/list.go
67+
FROM alpine
68+
COPY --from=build /bin/main /bin/main
69+
RUN chmod +x-rw /bin/main
70+
WORKDIR /
71+
EXPOSE 9001
72+
CMD ["/bin/main"]`,
73+
},
74+
{
75+
name: "python",
76+
f: &stack.Function{Handler: "list.py"},
77+
version: "v1.1.7",
78+
provider: "digitalocean",
79+
wantFwriter: `FROM python:3.7-slim
80+
RUN pip install --upgrade pip
81+
WORKDIR /
82+
COPY requirements.txt requirements.txt
83+
RUN pip install --no-cache-dir -r requirements.txt
84+
COPY . .
85+
ADD https://github.com/nitrictech/nitric/releases/download/v1.1.7/membrane-digitalocean /usr/local/bin/membrane
86+
RUN chmod +x-rw /usr/local/bin/membrane
87+
ENTRYPOINT ["/usr/local/bin/membrane"]
88+
EXPOSE 9001
89+
ENV PYTHONPATH=/app/:${PYTHONPATH}
90+
CMD ["python", "list.py"]`,
91+
},
92+
{
93+
name: "js",
94+
f: &stack.Function{Handler: "functions/list.js"},
95+
version: "latest",
96+
provider: "gcp",
97+
wantFwriter: `FROM node:alpine
98+
ADD https://github.com/nitrictech/nitric/releases/latest/download/membrane-gcp /usr/local/bin/membrane
99+
RUN chmod +x-rw /usr/local/bin/membrane
100+
ENTRYPOINT ["/usr/local/bin/membrane"]
101+
COPY package.json *.lock *-lock.json /
102+
RUN yarn import || echo Lockfile already exists
103+
RUN set -ex; yarn install --production --frozen-lockfile --cache-folder /tmp/.cache; rm -rf /tmp/.cache;
104+
COPY . .
105+
CMD ["node", "functions/list.js"]`,
106+
},
107+
{
108+
name: "java",
109+
f: &stack.Function{Handler: "test.java", ComputeUnit: stack.ComputeUnit{Context: "testdata"}},
110+
version: "latest",
111+
provider: "aws",
112+
wantFwriter: `FROM maven:3-openjdk-11 as build
113+
COPY /pom.xml pom.xml
114+
COPY /subdir/pom.xml subdir/pom.xml
115+
RUN mvn de.qaware.maven:go-offline-maven-plugin:resolve-dependencies
116+
COPY / .
117+
COPY /subdir subdir
118+
RUN mvn clean package
119+
FROM adoptopenjdk/openjdk11:x86_64-alpine-jre-11.0.10_9
120+
COPY --from=build test.java function.jar
121+
WORKDIR /
122+
EXPOSE 9001
123+
CMD ["java", "-jar", "function.jar"]
124+
ADD https://github.com/nitrictech/nitric/releases/latest/download/membrane-aws /usr/local/bin/membrane
125+
RUN chmod +x-rw /usr/local/bin/membrane
126+
ENTRYPOINT ["/usr/local/bin/membrane"]`,
127+
},
128+
}
129+
for _, tt := range tests {
130+
t.Run(tt.name, func(t *testing.T) {
131+
fwriter := &bytes.Buffer{}
132+
tt.f.WithPrivateInfo("testFn", "./")
133+
if err := Generate(tt.f, tt.version, tt.provider, fwriter); err != nil {
134+
t.Errorf("Generate() error = %v", err)
135+
return
136+
}
137+
if !cmp.Equal(fwriter.String(), tt.wantFwriter) {
138+
t.Error(cmp.Diff(tt.wantFwriter, fwriter.String()))
139+
}
140+
})
141+
}
142+
}
143+
144+
func TestGenerateForCodeAsConfig(t *testing.T) {
145+
tests := []struct {
146+
name string
147+
f *stack.Function
148+
version string
149+
provider string
150+
wantFwriter string
151+
}{
152+
{
153+
name: "ts",
154+
f: &stack.Function{Handler: "functions/list.ts"},
155+
wantFwriter: `FROM node:alpine
156+
RUN yarn global add typescript ts-node nodemon
157+
WORKDIR /app/
158+
ENTRYPOINT ["ts-node"]`,
159+
},
160+
}
161+
for _, tt := range tests {
162+
t.Run(tt.name, func(t *testing.T) {
163+
fwriter := &bytes.Buffer{}
164+
tt.f.WithPrivateInfo("testFn", "./")
165+
if err := GenerateForCodeAsConfig(tt.f.Handler, fwriter); err != nil {
166+
t.Errorf("GenerateForCodeAsConfig() error = %v", err)
167+
return
168+
}
169+
if !cmp.Equal(fwriter.String(), tt.wantFwriter) {
170+
t.Error(cmp.Diff(tt.wantFwriter, fwriter.String()))
171+
}
172+
})
173+
}
174+
}

pkg/functiondockerfile/golang_test.go

Lines changed: 0 additions & 54 deletions
This file was deleted.

pkg/functiondockerfile/java.go

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -72,7 +72,7 @@ func javaGenerator(f *stack.Function, version, provider string, w io.Writer) err
7272
func glob(dir string, name string) ([]string, error) {
7373
files := []string{}
7474
err := filepath.Walk(dir, func(path string, f os.FileInfo, err error) error {
75-
if f.Name() == name {
75+
if f != nil && f.Name() == name {
7676
// remove the provided dir (so it's like we have changed dir here)
7777
files = append(files, strings.Replace(path, dir, "", 1))
7878
}

pkg/functiondockerfile/javascript_test.go

Lines changed: 0 additions & 48 deletions
This file was deleted.

pkg/functiondockerfile/python_test.go

Lines changed: 0 additions & 51 deletions
This file was deleted.

pkg/functiondockerfile/testdata/pom.xml

Whitespace-only changes.

pkg/functiondockerfile/testdata/subdir/pom.xml

Whitespace-only changes.

0 commit comments

Comments
 (0)