util.startup: Fix exiting on pidfile trouble
prosody.shutdown() relies on prosody.main_thread, which has not been set
yet at this point.
Doing a clean shutdown might actually be harmful in case it tears down
things set up by the conflicting Prosody, such as the very pidfile we
were looking at.
Thanks again SigmaTel71 for noticing
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);