Skip to content

Commit c501c87

Browse files
authored
[build]: add tests for dockerfile arg parsing (#1342)
- Closes #1295 - Test cases added for validation based on changes from apple/container-builder-shim#70.
1 parent e104171 commit c501c87

1 file changed

Lines changed: 136 additions & 0 deletions

File tree

Tests/CLITests/Subcommands/Build/CLIBuilderTest.swift

Lines changed: 136 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1215,5 +1215,141 @@ extension TestCLIBuildBase {
12151215
)
12161216
#expect(try self.inspectImage(imageName) == imageName, "expected to have successfully built \(imageName)")
12171217
}
1218+
1219+
@Test func testBuildQuotedImageDockerfileArg() throws {
1220+
let tempDir: URL = try createTempDir()
1221+
defer {
1222+
try! FileManager.default.removeItem(at: tempDir)
1223+
}
1224+
1225+
let dockerfile: String =
1226+
"""
1227+
ARG IMAGE="ghcr.io/linuxcontainers/alpine:3.20"
1228+
FROM $IMAGE
1229+
RUN test -f /etc/alpine-release
1230+
"""
1231+
try createContext(tempDir: tempDir, dockerfile: dockerfile)
1232+
1233+
let imageName = "registry.local/quoted-image-dockerfile-arg:\(UUID().uuidString)"
1234+
try self.build(tag: imageName, tempDir: tempDir)
1235+
#expect(try self.inspectImage(imageName) == imageName, "expected to have successfully built \(imageName)")
1236+
}
1237+
1238+
@Test func testBuildQuotedStringDockerfileArg() throws {
1239+
let tempDir: URL = try createTempDir()
1240+
defer {
1241+
try! FileManager.default.removeItem(at: tempDir)
1242+
}
1243+
1244+
let dockerfile: String =
1245+
"""
1246+
FROM ghcr.io/linuxcontainers/alpine:3.20
1247+
ARG MYSTRING='"Hello, world!"'
1248+
RUN test "$MYSTRING" = '"Hello, world!"'
1249+
"""
1250+
try createContext(tempDir: tempDir, dockerfile: dockerfile)
1251+
1252+
let imageName = "registry.local/quoted-string-dockerfile-arg:\(UUID().uuidString)"
1253+
try self.build(tag: imageName, tempDir: tempDir)
1254+
#expect(try self.inspectImage(imageName) == imageName, "expected to have successfully built \(imageName)")
1255+
}
1256+
1257+
@Test func testBuildForwardReferencedDockerfileArg() throws {
1258+
let tempDir: URL = try createTempDir()
1259+
defer {
1260+
try! FileManager.default.removeItem(at: tempDir)
1261+
}
1262+
1263+
let dockerfile: String =
1264+
"""
1265+
ARG ALPINE="ghcr.io/linuxcontainers/alpine"
1266+
ARG IMAGE="${ALPINE}:3.20"
1267+
FROM $IMAGE
1268+
RUN test -f /etc/alpine-release
1269+
"""
1270+
try createContext(tempDir: tempDir, dockerfile: dockerfile)
1271+
1272+
let imageName = "registry.local/forward-referenced-dockerfile-arg:\(UUID().uuidString)"
1273+
try self.build(tag: imageName, tempDir: tempDir)
1274+
#expect(
1275+
try self.inspectImage(imageName) == imageName, "expected to have successfully built \(imageName)"
1276+
)
1277+
}
1278+
1279+
@Test func testBuildQuotedImageBuildArg() throws {
1280+
let tempDir: URL = try createTempDir()
1281+
defer {
1282+
try! FileManager.default.removeItem(at: tempDir)
1283+
}
1284+
1285+
let dockerfile: String =
1286+
"""
1287+
ARG IMAGE
1288+
FROM $IMAGE
1289+
RUN test -f /etc/alpine-release
1290+
"""
1291+
try createContext(tempDir: tempDir, dockerfile: dockerfile)
1292+
1293+
let imageName = "registry.local/quoted-image-build-arg:\(UUID().uuidString)"
1294+
try self.build(
1295+
tag: imageName,
1296+
tempDir: tempDir,
1297+
buildArgs: [
1298+
"IMAGE=ghcr.io/linuxcontainers/alpine:3.20"
1299+
]
1300+
)
1301+
#expect(try self.inspectImage(imageName) == imageName, "expected to have successfully built \(imageName)")
1302+
}
1303+
1304+
@Test func testBuildQuotedStringBuildArg() throws {
1305+
let tempDir: URL = try createTempDir()
1306+
defer {
1307+
try! FileManager.default.removeItem(at: tempDir)
1308+
}
1309+
1310+
let dockerfile: String =
1311+
"""
1312+
FROM ghcr.io/linuxcontainers/alpine:3.20
1313+
ARG MYSTRING
1314+
RUN test "$MYSTRING" = '"Hello, world!"'
1315+
"""
1316+
try createContext(tempDir: tempDir, dockerfile: dockerfile)
1317+
1318+
let imageName = "registry.local/quoted-string-build-arg:\(UUID().uuidString)"
1319+
try self.build(
1320+
tag: imageName,
1321+
tempDir: tempDir,
1322+
buildArgs: [
1323+
"MYSTRING=\"Hello, world!\""
1324+
]
1325+
)
1326+
#expect(try self.inspectImage(imageName) == imageName, "expected to have successfully built \(imageName)")
1327+
}
1328+
1329+
@Test func testBuildForwardReferencedBuildArg() throws {
1330+
let tempDir: URL = try createTempDir()
1331+
defer {
1332+
try! FileManager.default.removeItem(at: tempDir)
1333+
}
1334+
1335+
let dockerfile: String =
1336+
"""
1337+
ARG ALPINE
1338+
ARG IMAGE="$ALPINE:3.20"
1339+
FROM $IMAGE
1340+
RUN test -f /etc/alpine-release
1341+
"""
1342+
try createContext(tempDir: tempDir, dockerfile: dockerfile)
1343+
1344+
let imageName = "registry.local/forward-referenced-build-arg:\(UUID().uuidString)"
1345+
try self.build(
1346+
tag: imageName,
1347+
tempDir: tempDir,
1348+
buildArgs: [
1349+
"ALPINE=ghcr.io/linuxcontainers/alpine"
1350+
]
1351+
)
1352+
#expect(try self.inspectImage(imageName) == imageName, "expected to have successfully built \(imageName)")
1353+
}
12181354
}
12191355
}

0 commit comments

Comments
 (0)