1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75
|
local sasl = require "util.sasl";
-- profile * mechanism
-- callbacks could use spies instead
describe("util.sasl", function ()
describe("plain_test profile", function ()
local profile = {
plain_test = function (_, username, password, realm)
assert.equals("user", username)
assert.equals("pencil", password)
assert.equals("sasl.test", realm)
return true, true;
end;
};
it("works with PLAIN", function ()
local plain = sasl.new("sasl.test", profile);
assert.truthy(plain:select("PLAIN"));
assert.truthy(plain:process("\000user\000pencil"));
assert.equals("user", plain.username);
end);
end);
describe("plain profile", function ()
local profile = {
plain = function (_, username, realm)
assert.equals("user", username)
assert.equals("sasl.test", realm)
return "pencil", true;
end;
};
it("works with PLAIN", function ()
local plain = sasl.new("sasl.test", profile);
assert.truthy(plain:select("PLAIN"));
assert.truthy(plain:process("\000user\000pencil"));
assert.equals("user", plain.username);
end);
-- TODO SCRAM
end);
describe("oauthbearer profile", function()
local profile = {
oauthbearer = function(_, token, _realm, _authzid)
if token == "example-bearer-token" then
return "user", true, {};
else
return nil, nil, {}
end
end;
}
it("works with OAUTHBEARER", function()
local bearer = sasl.new("sasl.test", profile);
assert.truthy(bearer:select("OAUTHBEARER"));
assert.equals("success", bearer:process("n,,\1auth=Bearer example-bearer-token\1\1"));
assert.equals("user", bearer.username);
end)
it("returns extras with OAUTHBEARER", function()
local bearer = sasl.new("sasl.test", profile);
assert.truthy(bearer:select("OAUTHBEARER"));
local status, extra = bearer:process("n,,\1auth=Bearer unknown\1\1");
assert.equals("challenge", status);
assert.equals("{\"status\":\"invalid_token\"}", extra);
assert.equals("failure", bearer:process("\1"));
end)
end)
end);
|