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