-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathsources_test.go
More file actions
107 lines (99 loc) · 2.46 KB
/
sources_test.go
File metadata and controls
107 lines (99 loc) · 2.46 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
package main
import (
"os"
"path/filepath"
"testing"
)
func TestCollectSourcesFromDockerfile(t *testing.T) {
tests := []struct {
name string
dockerfile string
expectedSources []string
}{
{
name: "Basic COPY commands",
dockerfile: `FROM ubuntu:20.04
COPY file1.txt /app/
COPY file2.txt /app/
COPY file3.txt /app/`,
expectedSources: []string{
"file1.txt", "file2.txt", "file3.txt"},
},
{
name: "ADD commands",
dockerfile: `FROM ubuntu:20.04
ADD file1.txt /app/
ADD file2.txt /app/`,
expectedSources: []string{
"file1.txt", "file2.txt"},
},
{
name: "Mixed COPY and ADD commands",
dockerfile: `FROM ubuntu:20.04
COPY file1.txt /app/
ADD file2.txt /app/
COPY file3.txt /app/`,
expectedSources: []string{
"file1.txt", "file2.txt", "file3.txt"},
},
{
name: "Multi-stage build with --from",
dockerfile: `FROM ubuntu:20.04 AS builder
COPY file1.txt /app/
FROM ubuntu:20.04
COPY --from=builder /app/file1.txt /app/
COPY file2.txt /app/`,
expectedSources: []string{"file1.txt", "file2.txt"},
},
{
name: "No COPY or ADD commands",
dockerfile: `FROM ubuntu:20.04
RUN echo "test"
ENV TEST=value`,
expectedSources: []string{},
},
}
for _, tt := range tests {
t.Run(tt.name, func(t *testing.T) {
// Create a temporary directory
tempDir, err := os.MkdirTemp("", "docker-reuse-test-*")
if err != nil {
t.Fatalf("Failed to create temp dir: %v", err)
}
defer os.RemoveAll(tempDir)
// Create Dockerfile
dockerfilePath := filepath.Join(tempDir, "Dockerfile")
if err := os.WriteFile(dockerfilePath,
[]byte(tt.dockerfile), 0644); err != nil {
t.Fatalf("Failed to write Dockerfile: %v", err)
}
// Open Dockerfile
f, err := os.Open(dockerfilePath)
if err != nil {
t.Fatalf("Failed to open Dockerfile: %v", err)
}
defer f.Close()
// Test source collection
sources, err := collectSourcesFromDockerfile(f)
if err != nil {
t.Fatalf("collectSourcesFromDockerfile() "+
"error = %v", err)
}
// Check number of sources
if len(sources) != len(tt.expectedSources) {
t.Errorf("collectSourcesFromDockerfile() "+
"returned %d sources, want %d",
len(sources), len(tt.expectedSources))
}
// Check each source
for i, source := range sources {
if source != tt.expectedSources[i] {
t.Errorf("collectSourcesFromDockerfile() "+
"sources[%d] = %v, want %v",
i, source,
tt.expectedSources[i])
}
}
})
}
}