Merge pull request #157 from Orange-OpenSource/feature/run-test-integ-in-windows

Run Tests integ in windows
This commit is contained in:
lepapareil 2021-02-20 20:15:18 +01:00 committed by GitHub
commit c6424526b2
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
12 changed files with 144 additions and 33 deletions

View File

@ -76,6 +76,13 @@ cd c:\hurl\integration
start /B server.py start /B server.py
``` ```
launch the ssl server
```cmd
cd c:\hurl\integration
start /B ssl/server.py
```
launch hurl unit tests launch hurl unit tests
```cmd ```cmd
@ -85,8 +92,9 @@ cargo test
launch hurl integration tests launch hurl integration tests
``` ```cmd
coming soon ... ;) cd c:\hurl\integration
./integration.py
``` ```
## Generate version.txt file ## Generate version.txt file

View File

@ -39,6 +39,7 @@ $env:VCPKGRS_DYNAMIC = [System.Environment]::GetEnvironmentVariable("VCPKGRS_DYN
## Clone hurl project ## Clone hurl project
```powershell ```powershell
git.exe config --global core.autocrlf false
git.exe clone https://github.com/Orange-OpenSource/hurl git.exe clone https://github.com/Orange-OpenSource/hurl
``` ```
@ -57,6 +58,10 @@ New-Item -ItemType "Directory" -Path "c:\hurl\target" -Name "win-package"
Get-ChildItem -Path "c:\hurl\target\release" -Recurse -Include *.dll -File | Copy-Item -Destination "c:\hurl\target\win-package" Get-ChildItem -Path "c:\hurl\target\release" -Recurse -Include *.dll -File | Copy-Item -Destination "c:\hurl\target\win-package"
Get-ChildItem -Path "c:\hurl\target\release" -Recurse -Include hurl*.exe -File | Copy-Item -Destination "c:\hurl\target\win-package" Get-ChildItem -Path "c:\hurl\target\release" -Recurse -Include hurl*.exe -File | Copy-Item -Destination "c:\hurl\target\win-package"
((c:\hurl\target\win-package\hurl.exe --version) -Split " ")[1] > c:\hurl\target\win-package\version.txt ((c:\hurl\target\win-package\hurl.exe --version) -Split " ")[1] > c:\hurl\target\win-package\version.txt
$oldpath = Get-ItemProperty -Path HKCU:\Environment -Name Path
$newpath = $oldpath.Path += ";c:\hurl\target\win-package"
Set-ItemProperty -Path HKCU:\Environment -Name Path -Value $newpath
$env:Path = [System.Environment]::GetEnvironmentVariable("Path","Machine") + ";" + [System.Environment]::GetEnvironmentVariable("Path","User")
``` ```
## Test your app ## Test your app
@ -74,6 +79,14 @@ cd c:\hurl\integration
python server.py python server.py
``` ```
Keep original powershell prompt on background, and open one more separate powershell prompt to launch the ssl server
```powershell
cd c:\hurl\integration
python ssl/server.py
```
Keep original powershell prompt on background, and open one more separate powershell prompt to launch the proxy Keep original powershell prompt on background, and open one more separate powershell prompt to launch the proxy
```powershell ```powershell
@ -90,7 +103,8 @@ cargo test --verbose
launch hurl integration tests launch hurl integration tests
```powershell ```powershell
coming soon ... ;) cd c:\hurl\integration
./integration.py
``` ```
## Generate version.txt file ## Generate version.txt file

View File

@ -6,16 +6,20 @@ import test_lint
import test_format import test_format
import test_hurl import test_hurl
def get_files(glob_expr):
return sorted([f.replace('\\', '/') for f in glob.glob(glob_expr)])
def main(): def main():
# Static run (without server) # Static run (without server)
[test_echo.test(f) for f in sorted(glob.glob('tests/*.hurl') + glob.glob('tests_error_lint/*.hurl'))] [test_echo.test(f) for f in get_files('tests/*.hurl') + get_files('tests_error_lint/*.hurl')]
[test_format.test('json', f) for f in sorted(glob.glob('tests/*.hurl'))] [test_format.test('json', f) for f in get_files('tests/*.hurl')]
[test_format.test('html', f) for f in sorted(glob.glob('tests/*.hurl'))] [test_format.test('html', f) for f in get_files('tests/*.hurl')]
[test_lint.test(f) for f in sorted(glob.glob('tests_error_lint/*.hurl'))] [test_lint.test(f) for f in get_files('tests_error_lint/*.hurl')]
[test_hurl.test(f) for f in sorted(glob.glob('tests_error_parser/*.hurl'))] [test_hurl.test(f) for f in get_files('tests_error_parser/*.hurl')]
# Dynamic run (with server) # Dynamic run (with server)
[test_hurl.test(f) for f in sorted(glob.glob('tests/*.hurl')) + sorted(glob.glob('ssl/*.hurl'))] [test_hurl.test(f) for f in get_files('tests/*.hurl') + get_files('ssl/*.hurl')]
print('test integration ok!') print('test integration ok!')

View File

@ -0,0 +1,6 @@
error: SSL Certificate
--> ssl/error_self_signed_certificate.hurl:1:5
|
1 | GET https://localhost:8001/hello
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^^ schannel: SEC_E_UNTRUSTED_ROOT (0x80090325)
|

View File

@ -6,12 +6,22 @@ import sys
import subprocess import subprocess
import codecs import codecs
def decode_string(encoded):
if encoded.startswith(codecs.BOM_UTF8):
return encoded.decode('utf-8-sig')
elif encoded.startswith(codecs.BOM_UTF16):
encoded = encoded[len(codecs.BOM_UTF16):]
return encoded.decode('utf-16')
else:
return encoded.decode()
def test(hurl_file): def test(hurl_file):
cmd = ['hurlfmt', '--no-format', hurl_file] cmd = ['hurlfmt', '--no-format', hurl_file]
print(' '.join(cmd)) print(' '.join(cmd))
result = subprocess.run(cmd, stdout=subprocess.PIPE) result = subprocess.run(cmd, stdout=subprocess.PIPE)
expected = codecs.open(hurl_file, encoding='utf-8-sig').read() # Input file can be saved with a BOM expected = codecs.open(hurl_file, encoding='utf-8-sig').read() # Input file can be saved with a BOM
actual = result.stdout.decode("utf-8") actual = decode_string(result.stdout)
if actual != expected: if actual != expected:
print('>>> error in stdout') print('>>> error in stdout')
print(f'actual: <{actual}>\nexpected: <{expected}>') print(f'actual: <{actual}>\nexpected: <{expected}>')

View File

@ -2,16 +2,27 @@
# echo hurl file # echo hurl file
# The file is parsed and output exactly as the input # The file is parsed and output exactly as the input
# #
import codecs
import sys import sys
import subprocess import subprocess
def decode_string(encoded):
if encoded.startswith(codecs.BOM_UTF8):
return encoded.decode('utf-8-sig')
elif encoded.startswith(codecs.BOM_UTF16):
encoded = encoded[len(codecs.BOM_UTF16):]
return encoded.decode('utf-16')
else:
return encoded.decode()
def test(format_type, hurl_file): def test(format_type, hurl_file):
cmd = ['hurlfmt', '--format', format_type, hurl_file] cmd = ['hurlfmt', '--format', format_type, hurl_file]
print(' '.join(cmd)) print(' '.join(cmd))
result = subprocess.run(cmd, stdout=subprocess.PIPE) result = subprocess.run(cmd, stdout=subprocess.PIPE)
json_file = hurl_file.replace('.hurl','.' + format_type) json_file = hurl_file.replace('.hurl','.' + format_type)
expected = open(json_file).read().strip() expected = open(json_file, encoding='utf-8').read().strip()
actual = result.stdout.decode("utf-8").strip() actual = decode_string(result.stdout)
if actual != expected: if actual != expected:
print('>>> error in stdout') print('>>> error in stdout')
print(f'actual: <{actual}>\nexpected: <{expected}>') print(f'actual: <{actual}>\nexpected: <{expected}>')

View File

@ -1,9 +1,34 @@
#!/usr/bin/env python3 #!/usr/bin/env python3
# test hurl file # test hurl file
# #
import codecs
import sys import sys
import subprocess import subprocess
import os import os
import platform
def decode_string(encoded):
if encoded.startswith(codecs.BOM_UTF8):
return encoded.decode('utf-8-sig')
elif encoded.startswith(codecs.BOM_UTF16):
encoded = encoded[len(codecs.BOM_UTF16):]
return encoded.decode('utf-16')
else:
return encoded.decode()
# return linux, osx or windows
def get_os():
if platform.system() == 'Linux':
return 'linux'
elif platform.system() == 'Darwin':
return 'osx'
elif platform.system() == 'Windows':
return 'windows'
else:
raise Error('Invalid Platform ' + platform.system())
def test(hurl_file): def test(hurl_file):
@ -21,29 +46,37 @@ def test(hurl_file):
expected = int(open(f).read().strip()) expected = int(open(f).read().strip())
if result.returncode != expected: if result.returncode != expected:
print('>>> error in return code') print('>>> error in return code')
print('expected: {expected} actual:{result.returncode}') print(f'expected: {expected} actual:{result.returncode}')
sys.exit(1) sys.exit(1)
# stdout # stdout
f = hurl_file.replace('.hurl','.out') f = hurl_file.replace('.hurl','.out')
if os.path.exists(f): if os.path.exists(f):
expected = open(f, 'rb').read() expected = open(f, 'rb').read()
actual = result.stdout actual = result.stdout
if expected != actual: if expected != actual:
print('>>> error in stdout') print('>>> error in stdout')
print(f'actual: <{actual}>\nexpected: <{expected}>') print(f'actual: <{actual}>\nexpected: <{expected}>')
sys.exit(1) sys.exit(1)
# stderr
f = hurl_file.replace('.hurl','.err')
if os.path.exists(f):
expected = open(f).read().strip()
actual = result.stderr.decode("utf-8").strip()
if expected != actual:
print('>>> error in stderr')
print(f'actual: <{actual}>\nexpected: <{expected}>')
sys.exit(1)
# stderr
f = hurl_file.replace('.hurl', '.' + get_os() + '.err')
if os.path.exists(f):
expected = open(f).read().strip()
actual = decode_string(result.stderr).strip()
if expected != actual:
print('>>> error in stderr')
print(f'actual: <{actual}>\nexpected: <{expected}>')
sys.exit(1)
else:
f = hurl_file.replace('.hurl', '.err')
if os.path.exists(f):
expected = open(f).read().strip()
actual = decode_string(result.stderr).strip()
if expected != actual:
print('>>> error in stderr')
print(f'actual: <{actual}>\nexpected: <{expected}>')
sys.exit(1)
def main(): def main():
for hurl_file in sys.argv[1:]: for hurl_file in sys.argv[1:]:

View File

@ -1,9 +1,20 @@
#!/usr/bin/env python3 #!/usr/bin/env python3
# lint hurl file # lint hurl file
# #
import codecs
import sys import sys
import subprocess import subprocess
def decode_string(encoded):
if encoded.startswith(codecs.BOM_UTF8):
return encoded.decode('utf-8-sig')
elif encoded.startswith(codecs.BOM_UTF16):
encoded = encoded[len(codecs.BOM_UTF16):]
return encoded.decode('utf-16')
else:
return encoded.decode()
def test(hurl_file): def test(hurl_file):
cmd = ['hurlfmt', '--check', hurl_file] cmd = ['hurlfmt', '--check', hurl_file]
print(' '.join(cmd)) print(' '.join(cmd))
@ -14,7 +25,7 @@ def test(hurl_file):
err_file = hurl_file.replace('.hurl','.err') err_file = hurl_file.replace('.hurl','.err')
expected = open(err_file).read().strip() expected = open(err_file).read().strip()
actual = result.stderr.decode("utf-8").strip() actual = decode_string(result.stderr).strip()
if actual != expected: if actual != expected:
print('>>> error in stderr') print('>>> error in stderr')
print(f'actual: <{actual}>\nexpected: <{expected}>') print(f'actual: <{actual}>\nexpected: <{expected}>')
@ -25,7 +36,7 @@ def test(hurl_file):
result = subprocess.run(cmd, stdout=subprocess.PIPE, stderr=subprocess.PIPE) result = subprocess.run(cmd, stdout=subprocess.PIPE, stderr=subprocess.PIPE)
err_file = hurl_file.replace('.hurl','.hurl.lint') err_file = hurl_file.replace('.hurl','.hurl.lint')
expected = open(err_file).read().strip() expected = open(err_file).read().strip()
actual = result.stdout.decode("utf-8").strip() actual = decode_string(result.stdout).strip()
if actual != expected: if actual != expected:
print('>>> error in stdout') print('>>> error in stdout')
print(f'actual: <{actual}>\nexpected: <{expected}>') print(f'actual: <{actual}>\nexpected: <{expected}>')

View File

@ -1 +1 @@
--color --color

View File

@ -0,0 +1,7 @@
error: File ReadAccess
--> tests/error_file_read_access.hurl:2:6
|
2 | file,does_not_exist;
| ^^^^^^^^^^^^^^ File tests\does_not_exist can not be read
|

View File

@ -0,0 +1,7 @@
error: File ReadAccess
--> tests/error_multipart_form_data.hurl:4:15
|
4 | upload1: file,unknown;
| ^^^^^^^ File tests\unknown can not be read
|

View File

@ -537,12 +537,12 @@ fn test_error_ssl() {
let mut client = Client::init(options); let mut client = Client::init(options);
let request = default_get_request("https://localhost:8001/hello".to_string()); let request = default_get_request("https://localhost:8001/hello".to_string());
let error = client.execute(&request, 0).err().unwrap(); let error = client.execute(&request, 0).err().unwrap();
assert_eq!( let message = if cfg!(windows) {
error, "schannel: SEC_E_UNTRUSTED_ROOT (0x80090325)".to_string()
HttpError::SSLCertificate(Some( } else {
"SSL certificate problem: self signed certificate".to_string() "SSL certificate problem: self signed certificate".to_string()
)) };
); assert_eq!(error, HttpError::SSLCertificate(Some(message)));
} }
#[test] #[test]