view Database/Lua/HttpClient.lua @ 591:3cb7c6162c77

new test for XSS
author Alain Mazy <am@osimis.io>
date Tue, 12 Dec 2023 10:14:37 +0100
parents f78f7ee6b660
children
line wrap: on
line source

-- for these tests, we issue HTTP requests to httpbin.org that performs smart echo (it returns all data/headers it has received + some extra data)
-- since these tests to httpbin.org fails a lot, we have added 10 retries
testSucceeded = true

local payload = {}
payload['stringMember'] = 'toto'
payload['intMember'] = 2

local httpHeaders = {}
httpHeaders['Content-Type'] = 'application/json'
httpHeaders['Toto'] = 'Tutu'

-- Issue HttpPost with body
retry = 10
response = nil
while retry > 0 and response == nil do
	print("HttpClient test: POST with body to httpbin.org")
	response = ParseJson(HttpPost('http://httpbin.org/post', DumpJson(payload), httpHeaders))
end
testSucceeded = testSucceeded and (response['headers']['Content-Type'] == 'application/json' and response['headers']['Toto'] == 'Tutu')
testSucceeded = testSucceeded and (response['json']['intMember'] == 2 and response['json']['stringMember'] == 'toto')
if not testSucceeded then print('Failed in HttpPost with body') PrintRecursive(response) end

-- Issue HttpPost without body
retry = 10
response = nil
while retry > 0 and response == nil do
	print("HttpClient test: POST without body to httpbin.org")
	response = ParseJson(HttpPost('http://httpbin.org/post', nil, httpHeaders))
end
testSucceeded = testSucceeded and (response['headers']['Content-Type'] == 'application/json' and response['headers']['Toto'] == 'Tutu')
testSucceeded = testSucceeded and (response['data'] == '')
if not testSucceeded then print('Failed in HttpPost without body') PrintRecursive(response) end

-- Issue HttpPut with body
retry = 10
response = nil
while retry > 0 and response == nil do
	print("HttpClient test: PUT with body to httpbin.org")
	response = ParseJson(HttpPut('http://httpbin.org/put', DumpJson(payload), httpHeaders))
end
testSucceeded = testSucceeded and (response['headers']['Content-Type'] == 'application/json' and response['headers']['Toto'] == 'Tutu')
testSucceeded = testSucceeded and (response['json']['intMember'] == 2 and response['json']['stringMember'] == 'toto')
if not testSucceeded then print('Failed in HttpPut with body') PrintRecursive(response) end

-- Issue HttpPut without body
retry = 10
response = nil
while retry > 0 and response == nil do
	print("HttpClient test: PUT without body to httpbin.org")
	response = ParseJson(HttpPut('http://httpbin.org/put', nil, httpHeaders))
end
testSucceeded = testSucceeded and (response['headers']['Content-Type'] == 'application/json' and response['headers']['Toto'] == 'Tutu')
testSucceeded = testSucceeded and (response['data'] == '')
if not testSucceeded then print('Failed in HttpPut without body') PrintRecursive(response) end

-- Issue HttpDelete (juste make sure it is issued, we can't check the response)
HttpDelete('http://httpbin.org/delete', httpHeaders)

-- TODO Very strange: Since Orthanc 1.6.0, a timeout frequently occurs
-- in curl at this point

-- Issue HttpGet
retry = 10
response = nil
while retry > 0 and response == nil do
	print("HttpClient test: GET to httpbin.org")
	response = ParseJson(HttpGet('http://httpbin.org/get', httpHeaders))
end
testSucceeded = testSucceeded and (response['headers']['Content-Type'] == 'application/json' and response['headers']['Toto'] == 'Tutu')
if not testSucceeded then print('Failed in HttpGet') PrintRecursive(response) end


system = ParseJson(RestApiGet('/system'))

if system['Version'] == 'mainline' or system['Version'] == '1.11.1' or system['ApiVersion'] >= 18 then  -- introduced in 1.11.1 which is ApiVersion 17 (too lazy to reimplement IsAboveOrthancVersion in lua :-) )
	-- Test SetHttpTimeout
	SetHttpTimeout(10)
	print("HttpClient test: GET with timeout (10) to httpstat.us")
	response = HttpGet('https://httpstat.us/200?sleep=1000')
	testSucceeded = testSucceeded and (response == '200 OK')
	if not testSucceeded then print('Failed in SetHttpTimeout1') PrintRecursive(response) end

	SetHttpTimeout(1)
	print("HttpClient test: GET with timeout (1) to httpstat.us")
	response = HttpGet('https://httpstat.us/200?sleep=2000')
	testSucceeded = testSucceeded and (response == nil)
	if not testSucceeded then print('Failed in SetHttpTimeout2') PrintRecursive(response) end
end

if testSucceeded then
	print('OK')
else
	print('FAILED')
end