File

spec/util_uuid_spec.lua @ 13633:6b84d11aa09b

mod_storage_sql: Detect SQLite3 without UPSERT (or SQLCipher 3.x) SQLCipher v3.4.1 (the version in Debian 12) is based on SQLite3 v3.15.2, while UPSERT support was introduced in SQLite3 v3.24.0 This check was not needed before because we v3.24.0 has not been in a version of Debian we support for a long, long time. Note however that SQLCipher databases are not compatible across major versions, upgrading from v3.x to v4.x requires executing a migration. Attempts at making `prosodyctl mod_storage_sql upgrade` perform such a migration has not been successful. Executing the following in the `sqlcipher` tool should do the migration: PRAGMA key = '<key material>'; PRAGMA cipher_migrate;
author Kim Alvefur <zash@zash.se>
date Thu, 23 Jan 2025 19:33:05 +0100
parent 13317:e6a5f196fc1f
line wrap: on
line source

-- This tests the format, not the randomness

local uuid = require "util.uuid";

describe("util.uuid", function()
	describe("#generate()", function()
		it("should work follow the UUID pattern", function()
			-- https://www.rfc-editor.org/rfc/rfc4122.html#section-4.4

			local pattern = "^" .. table.concat({
				string.rep("%x", 8),
				string.rep("%x", 4),
				"4" .. -- version
				string.rep("%x", 3),
				"[89ab]" .. -- reserved bits of 1 and 0
				string.rep("%x", 3),
				string.rep("%x", 12),
			}, "%-") .. "$";

			for _ = 1, 100 do
				assert.is_string(uuid.generate():match(pattern));
			end

			assert.truthy(uuid.generate() ~= uuid.generate(), "does not generate the same UUIDv4 twice")
		end);
	end);
	describe("#v7", function()
		it("should also follow the UUID pattern", function()
			local pattern = "^" .. table.concat({
					string.rep("%x", 8),
					string.rep("%x", 4),
					"7" .. -- version
					string.rep("%x", 3),
					"[89ab]" .. -- reserved bits of 1 and 0
					string.rep("%x", 3),
					string.rep("%x", 12),
				}, "%-") .. "$";

			local one = uuid.v7(); -- one before the loop to ensure some time passes
			for _ = 1, 100 do
				assert.is_string(uuid.v7():match(pattern));
			end
			-- one after the loop when some time should have passed
			assert.truthy(one < uuid.v7(), "should be ordererd")
		end);
	end);
end);