File

spec/util_uuid_spec.lua @ 13665:30a91d819913 13.0

mod_account_activity: Record an account's last activity timestamp This is similar to mod_lastlog/mod_lastlog2. Some functionality was dropped, compared to mod_lastlog2. These features (recording the IP address, or tracking the timestamp of multiple events) are handled better by the mod_audit family of modules. For example, those correctly handle multiple logins, IP address truncation, and data retention policies. The "registered" timestamp from mod_lastlog2 was also dropped, as this has been stored in account_details by Prosody itself since at least 0.12 already.
author Matthew Wild <mwild1@gmail.com>
date Wed, 12 Feb 2025 12:33:45 +0000
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);