File

spec/util_datetime_spec.lua @ 13813:fd7b0adada05 13.0

portmanager: Take automatic cert selection into account when setting SNI cert This fixes (another) issue with the fix in 4ea7bd7325be, where it no longer checked the automatic cert index for an appropriate certificate.
author Matthew Wild <mwild1@gmail.com>
date Thu, 03 Apr 2025 12:02:45 +0100
parent 12755:a09dacf660d2
line wrap: on
line source

local util_datetime = require "util.datetime";

describe("util.datetime", function ()
	it("should have been loaded", function ()
		assert.is_table(util_datetime);
	end);
	describe("#date", function ()
		local date = util_datetime.date;
		it("should exist", function ()
			assert.is_function(date);
		end);
		it("should return a string", function ()
			assert.is_string(date());
		end);
		it("should look like a date", function ()
			assert.truthy(string.find(date(), "^%d%d%d%d%-%d%d%-%d%d$"));
		end);
		it("should work", function ()
			assert.equals("2006-01-02", date(1136239445));
		end);
		it("should ignore fractional parts", function ()
			assert.equals("2006-01-02", date(1136239445.5));
		end);
	end);
	describe("#time", function ()
		local time = util_datetime.time;
		it("should exist", function ()
			assert.is_function(time);
		end);
		it("should return a string", function ()
			assert.is_string(time());
		end);
		it("should look like a timestamp", function ()
			-- Note: Sub-second precision and timezones are ignored
			assert.truthy(string.find(time(), "^%d%d:%d%d:%d%d"));
		end);
		it("should work", function ()
			assert.equals("22:04:05", time(1136239445));
		end);
		it("should handle precision", function ()
			assert.equal("14:46:31.158200", time(1660488391.1582))
			assert.equal("14:46:32.158200", time(1660488392.1582))
			assert.equal("14:46:33.158200", time(1660488393.1582))
			assert.equal("14:46:33.999900", time(1660488393.9999))
		end)
	end);
	describe("#datetime", function ()
		local datetime = util_datetime.datetime;
		it("should exist", function ()
			assert.is_function(datetime);
		end);
		it("should return a string", function ()
			assert.is_string(datetime());
		end);
		it("should look like a timestamp", function ()
			-- Note: Sub-second precision and timezones are ignored
			assert.truthy(string.find(datetime(), "^%d%d%d%d%-%d%d%-%d%dT%d%d:%d%d:%d%d"));
		end);
		it("should work", function ()
			assert.equals("2006-01-02T22:04:05Z", datetime(1136239445));
		end);
		it("should handle precision", function ()
			assert.equal("2022-08-14T14:46:31.158200Z", datetime(1660488391.1582))
			assert.equal("2022-08-14T14:46:32.158200Z", datetime(1660488392.1582))
			assert.equal("2022-08-14T14:46:33.158200Z", datetime(1660488393.1582))
			assert.equal("2022-08-14T14:46:33.999900Z", datetime(1660488393.9999))
		end)
	end);
	describe("#legacy", function ()
		local legacy = util_datetime.legacy;
		it("should exist", function ()
			assert.is_function(legacy);
		end);
		it("should not add precision", function ()
			assert.equal("20220814T14:46:31", legacy(1660488391.1582));
		end);
	end);
	describe("#parse", function ()
		local parse = util_datetime.parse;
		it("should exist", function ()
			assert.is_function(parse);
		end);
		it("should work", function ()
			-- Timestamp used by Go
			assert.equals(1511114293, parse("2017-11-19T17:58:13Z"));
			assert.equals(1511114330, parse("2017-11-19T18:58:50+0100"));
			assert.equals(1136239445, parse("2006-01-02T15:04:05-0700"));
			assert.equals(1136239445, parse("2006-01-02T15:04:05-07"));
		end);
		it("should handle timezones", function ()
			-- https://xmpp.org/extensions/xep-0082.html#example-2 and 3
			assert.equals(parse("1969-07-21T02:56:15Z"), parse("1969-07-20T21:56:15-05:00"));
		end);
		it("should handle precision", function ()
			-- floating point comparison is not an exact science
			assert.truthy(math.abs(1660488392.1582 - parse("2022-08-14T14:46:32.158200Z")) < 0.001)
		end)
		it("should return nil when given invalid inputs", function ()
			assert.is_nil(parse(nil));
			assert.is_nil(parse("hello world"));
			assert.is_nil(parse("2017-11-19T18:58:50$0100"));
		end);
	end);
end);