Miku AuahDark 2 лет назад
Родитель
Сommit
da3bae4a93
1 измененных файлов с 100 добавлено и 0 удалено
  1. 100 0
      example/test.lua

+ 100 - 0
example/test.lua

@@ -0,0 +1,100 @@
+local https = require "https"
+local json
+
+-- Helper
+
+local function hexencode(c)
+	return string.format("%%%02x", string.byte(c))
+end
+
+local function escape(s)
+	return (string.gsub(s, "([^A-Za-z0-9_])", hexencode))
+end
+
+local function urlencode(list)
+	local result = {}
+
+	for k, v in pairs(list) do
+		result[#result + 1] = escape(k).."="..escape(v)
+	end
+
+	return table.concat(result, "&")
+end
+
+math.randomseed(os.time())
+
+-- Tests function
+
+local function test_download_json()
+	local code, response = https.request("https://raw.githubusercontent.com/rxi/json.lua/master/json.lua")
+	assert(code == 200, "expected code 200, got "..code)
+	json = assert(loadstring(response, "=json.lua"))()
+end
+
+local function test_head()
+	local code, response = https.request("https://httpbin.org/get", {method = "HEAD"})
+	assert(code == 200, "expected code 200, got "..code)
+	assert(#response == 0, "expected empty response")
+end
+
+local function test_custom_header()
+	local headerName = "RandomNumber"
+	local random = math.random(1, 1000)
+	local code, response = https.request("https://httpbin.org/get", {
+		headers = {
+			[headerName] = tostring(random)
+		}
+	})
+	assert(code == 200, "expected code 200, got "..code)
+	local root = json.decode(response)
+
+	-- Headers are case-insensitive
+	local found = false
+	for k, v in pairs(root.headers) do
+		if k:lower() == headerName:lower() then
+			assert(tonumber(v) == random, "random number does not match, expected "..random..", got "..v)
+			found = true
+		end
+	end
+
+	assert(found, "custom header RandomNumber not found")
+end
+
+local function test_send(method, kind)
+	local data = {Foo = "Bar", Key = "Value"}
+	local input, contentType
+	if kind == "json" then
+		input = json.encode
+		contentType = "application/json"
+	else
+		input = urlencode
+		contentType = "application/x-www-form-urlencoded"
+	end
+
+	local code, response = https.request("https://httpbin.org/"..method:lower(), {
+		headers = {["Content-Type"] = contentType},
+		data = input(data),
+		method = method
+	})
+
+	assert(code == 200, "expected code 200, got "..code)
+	local root = json.decode(response)
+
+	for k, v in pairs(data) do
+		local v0 = assert(root[kind][k], "Missing key "..k.." for "..kind)
+		assert(v0 == v, "Key "..k.." value mismatch, expected '"..v.."' got '"..v0.."'")
+	end
+end
+
+-- Tests call
+print("test downloading json library") test_download_json()
+print("test custom header") test_custom_header()
+
+for _, method in ipairs({"POST", "PUT", "PATCH", "DELETE"}) do
+	for _, kind in ipairs({"form", "json"}) do
+		print("test "..method.." with data send as "..kind)
+		test_send(method, kind)
+	end
+end
+
+print("Test successful!")