xref: /freebsd/libexec/nuageinit/tests/decode_base64.lua (revision 68fd0feacb8ce5da9c47deea5505b3241b2ba6ec)
1*68fd0feaSBaptiste Daroussin#!/usr/libexec/flua
2*68fd0feaSBaptiste Daroussin---
3*68fd0feaSBaptiste Daroussin-- SPDX-License-Identifier: BSD-2-Clause
4*68fd0feaSBaptiste Daroussin--
5*68fd0feaSBaptiste Daroussin-- Copyright (c) 2026 Baptiste Daroussin <bapt@FreeBSD.org>
6*68fd0feaSBaptiste Daroussin
7*68fd0feaSBaptiste Daroussinlocal n = require("nuage")
8*68fd0feaSBaptiste Daroussin
9*68fd0feaSBaptiste Daroussin-- decode_base64 is not exported, test via addfile
10*68fd0feaSBaptiste Daroussin
11*68fd0feaSBaptiste Daroussinlocal function test_decode(input, expected)
12*68fd0feaSBaptiste Daroussin	local r, err = n.addfile({
13*68fd0feaSBaptiste Daroussin		content = input,
14*68fd0feaSBaptiste Daroussin		encoding = "base64",
15*68fd0feaSBaptiste Daroussin		path = "/tmp/nuage_test_b64"
16*68fd0feaSBaptiste Daroussin	}, false)
17*68fd0feaSBaptiste Daroussin	if not r then
18*68fd0feaSBaptiste Daroussin		n.err(err)
19*68fd0feaSBaptiste Daroussin	end
20*68fd0feaSBaptiste Daroussin	local root = os.getenv("NUAGE_FAKE_ROOTDIR")
21*68fd0feaSBaptiste Daroussin	if not root then
22*68fd0feaSBaptiste Daroussin		root = ""
23*68fd0feaSBaptiste Daroussin	end
24*68fd0feaSBaptiste Daroussin	local f = assert(io.open(root .. "/tmp/nuage_test_b64", "r"))
25*68fd0feaSBaptiste Daroussin	local str = f:read("*all")
26*68fd0feaSBaptiste Daroussin	f:close()
27*68fd0feaSBaptiste Daroussin	if str ~= expected then
28*68fd0feaSBaptiste Daroussin		n.err("base64 decode failed: expected '" .. expected
29*68fd0feaSBaptiste Daroussin			.. "' got '" .. str .. "'")
30*68fd0feaSBaptiste Daroussin	end
31*68fd0feaSBaptiste Daroussinend
32*68fd0feaSBaptiste Daroussin
33*68fd0feaSBaptiste Daroussin-- empty input
34*68fd0feaSBaptiste Daroussintest_decode("", "")
35*68fd0feaSBaptiste Daroussin
36*68fd0feaSBaptiste Daroussin-- single byte: 'a'
37*68fd0feaSBaptiste Daroussintest_decode("YQ==", "a")
38*68fd0feaSBaptiste Daroussin
39*68fd0feaSBaptiste Daroussin-- two bytes: 'ab'
40*68fd0feaSBaptiste Daroussintest_decode("YWI=", "ab")
41*68fd0feaSBaptiste Daroussin
42*68fd0feaSBaptiste Daroussin-- three bytes: 'abc'
43*68fd0feaSBaptiste Daroussintest_decode("YWJj", "abc")
44*68fd0feaSBaptiste Daroussin
45*68fd0feaSBaptiste Daroussin-- newline in base64
46*68fd0feaSBaptiste Daroussintest_decode("YmxhCg==", "bla\n")
47*68fd0feaSBaptiste Daroussin
48*68fd0feaSBaptiste Daroussin-- spaces should be ignored
49*68fd0feaSBaptiste Daroussintest_decode("Y Q = =", "a")
50*68fd0feaSBaptiste Daroussin
51*68fd0feaSBaptiste Daroussin-- b64 alias
52*68fd0feaSBaptiste Daroussinlocal r, err = n.addfile({
53*68fd0feaSBaptiste Daroussin	content = "YQ==",
54*68fd0feaSBaptiste Daroussin	encoding = "b64",
55*68fd0feaSBaptiste Daroussin	path = "/tmp/nuage_test_b64_b64"
56*68fd0feaSBaptiste Daroussin}, false)
57*68fd0feaSBaptiste Daroussinif not r then
58*68fd0feaSBaptiste Daroussin	n.err("b64 encoding alias should work: " .. tostring(err))
59*68fd0feaSBaptiste Daroussinend
60*68fd0feaSBaptiste Daroussin
61*68fd0feaSBaptiste Daroussinos.exit(0)
62