summaryrefslogtreecommitdiffhomepage
path: root/test
diff options
context:
space:
mode:
authorAndrey Zelenkov <zelenkov@nginx.com>2018-02-12 19:32:54 +0300
committerAndrey Zelenkov <zelenkov@nginx.com>2018-02-12 19:32:54 +0300
commite2c3fa630469bf006de5a983910e391c5889430d (patch)
tree2021663f938438db7c18b3bcc87b6402b6d6b5e1 /test
parent9646772a00e50c437e0b3204ce6233b6414e1053 (diff)
downloadunit-e2c3fa630469bf006de5a983910e391c5889430d.tar.gz
unit-e2c3fa630469bf006de5a983910e391c5889430d.tar.bz2
Tests: perl module.
Diffstat (limited to 'test')
-rw-r--r--test/perl/body_array/psgi.pl5
-rw-r--r--test/perl/body_empty/psgi.pl5
-rw-r--r--test/perl/body_io_empty/psgi.pl9
-rw-r--r--test/perl/body_io_file/file1
-rw-r--r--test/perl/body_io_file/psgi.pl7
-rw-r--r--test/perl/errors_print/psgi.pl7
-rw-r--r--test/perl/header_pairs/psgi.pl5
-rw-r--r--test/perl/input_copy/psgi.pl10
-rw-r--r--test/perl/input_read_empty/psgi.pl7
-rw-r--r--test/perl/input_read_offset/psgi.pl7
-rw-r--r--test/perl/query_string/psgi.pl8
-rw-r--r--test/perl/server_port/psgi.pl8
-rw-r--r--test/perl/variables/psgi.pl16
-rw-r--r--test/test_perl_application.py118
-rw-r--r--test/unit.py22
15 files changed, 235 insertions, 0 deletions
diff --git a/test/perl/body_array/psgi.pl b/test/perl/body_array/psgi.pl
new file mode 100644
index 00000000..19c89abb
--- /dev/null
+++ b/test/perl/body_array/psgi.pl
@@ -0,0 +1,5 @@
+my $app = sub {
+ my ($environ) = @_;
+
+ return ['200', ['Content-Length' => '10'], ['012', '345', '678', '9']];
+};
diff --git a/test/perl/body_empty/psgi.pl b/test/perl/body_empty/psgi.pl
new file mode 100644
index 00000000..a05921f4
--- /dev/null
+++ b/test/perl/body_empty/psgi.pl
@@ -0,0 +1,5 @@
+my $app = sub {
+ my ($environ) = @_;
+
+ return ['200', [], []];
+};
diff --git a/test/perl/body_io_empty/psgi.pl b/test/perl/body_io_empty/psgi.pl
new file mode 100644
index 00000000..0a203dec
--- /dev/null
+++ b/test/perl/body_io_empty/psgi.pl
@@ -0,0 +1,9 @@
+use IO::Handle;
+
+my $app = sub {
+ my ($environ) = @_;
+
+ my $io = IO::Handle->new();
+
+ return ['200', [], $io];
+};
diff --git a/test/perl/body_io_file/file b/test/perl/body_io_file/file
new file mode 100644
index 00000000..273a402f
--- /dev/null
+++ b/test/perl/body_io_file/file
@@ -0,0 +1 @@
+body
diff --git a/test/perl/body_io_file/psgi.pl b/test/perl/body_io_file/psgi.pl
new file mode 100644
index 00000000..2612ae18
--- /dev/null
+++ b/test/perl/body_io_file/psgi.pl
@@ -0,0 +1,7 @@
+my $app = sub {
+ my ($environ) = @_;
+
+ open my $io, '<file';
+
+ return ['200', ['Content-Length' => 5], $io];
+};
diff --git a/test/perl/errors_print/psgi.pl b/test/perl/errors_print/psgi.pl
new file mode 100644
index 00000000..e50ec65d
--- /dev/null
+++ b/test/perl/errors_print/psgi.pl
@@ -0,0 +1,7 @@
+my $app = sub {
+ my ($environ) = @_;
+
+ my $result = $environ->{'psgi.errors'}->print('Error in application');
+
+ return ['200', ['Content-Length' => '1'], [$result]];
+};
diff --git a/test/perl/header_pairs/psgi.pl b/test/perl/header_pairs/psgi.pl
new file mode 100644
index 00000000..63d241bc
--- /dev/null
+++ b/test/perl/header_pairs/psgi.pl
@@ -0,0 +1,5 @@
+my $app = sub {
+ my ($environ) = @_;
+
+ return ['200', ['Content-Length', 0, 'blah', 'blah'], []];
+};
diff --git a/test/perl/input_copy/psgi.pl b/test/perl/input_copy/psgi.pl
new file mode 100644
index 00000000..449e4027
--- /dev/null
+++ b/test/perl/input_copy/psgi.pl
@@ -0,0 +1,10 @@
+my $app = sub {
+ my ($environ) = @_;
+
+ open(my $fh, ">&", $environ->{'psgi.input'});
+
+ my $len = int($environ->{'CONTENT_LENGTH'});
+ $fh->read(my $body, $len);
+
+ return ['200', ['Content-Length' => $len], [$body]];
+};
diff --git a/test/perl/input_read_empty/psgi.pl b/test/perl/input_read_empty/psgi.pl
new file mode 100644
index 00000000..caa894f4
--- /dev/null
+++ b/test/perl/input_read_empty/psgi.pl
@@ -0,0 +1,7 @@
+my $app = sub {
+ my ($environ) = @_;
+
+ $len = $environ->{'psgi.input'}->read(my $body, 1024);
+
+ return ['200', ['Content-Length' => $len], [$body]];
+};
diff --git a/test/perl/input_read_offset/psgi.pl b/test/perl/input_read_offset/psgi.pl
new file mode 100644
index 00000000..420b7d89
--- /dev/null
+++ b/test/perl/input_read_offset/psgi.pl
@@ -0,0 +1,7 @@
+my $app = sub {
+ my ($environ) = @_;
+
+ $environ->{'psgi.input'}->read(my $body, 4, 4);
+
+ return ['200', ['Content-Length' => 4], [$body]];
+};
diff --git a/test/perl/query_string/psgi.pl b/test/perl/query_string/psgi.pl
new file mode 100644
index 00000000..87ecc368
--- /dev/null
+++ b/test/perl/query_string/psgi.pl
@@ -0,0 +1,8 @@
+my $app = sub {
+ my ($environ) = @_;
+
+ return ['200', [
+ 'Content-Length' => 0,
+ 'Query-String' => $environ->{'QUERY_STRING'}
+ ], []];
+};
diff --git a/test/perl/server_port/psgi.pl b/test/perl/server_port/psgi.pl
new file mode 100644
index 00000000..49ef1330
--- /dev/null
+++ b/test/perl/server_port/psgi.pl
@@ -0,0 +1,8 @@
+my $app = sub {
+ my ($environ) = @_;
+
+ return ['200', [
+ 'Content-Length' => 0,
+ 'Server-Port' => $environ->{'SERVER_PORT'}
+ ], []];
+};
diff --git a/test/perl/variables/psgi.pl b/test/perl/variables/psgi.pl
new file mode 100644
index 00000000..c0a61b67
--- /dev/null
+++ b/test/perl/variables/psgi.pl
@@ -0,0 +1,16 @@
+my $app = sub {
+ my ($environ) = @_;
+
+ my $len = int($environ->{'CONTENT_LENGTH'});
+ $environ->{'psgi.input'}->read(my $body, $len);
+
+ return ['200', [
+ 'Content-Type' => $environ->{'CONTENT_TYPE'},
+ 'Content-Length' => $len,
+ 'Request-Method' => $environ->{'REQUEST_METHOD'},
+ 'Request-Uri' => $environ->{'REQUEST_URI'},
+ 'Http-Host' => $environ->{'HTTP_HOST'},
+ 'Server-Protocol' => $environ->{'SERVER_PROTOCOL'},
+ 'Custom-Header' => $environ->{'HTTP_CUSTOM_HEADER'}
+ ], [$body]];
+};
diff --git a/test/test_perl_application.py b/test/test_perl_application.py
new file mode 100644
index 00000000..3b1e9404
--- /dev/null
+++ b/test/test_perl_application.py
@@ -0,0 +1,118 @@
+import re
+import time
+import unittest
+import unit
+
+class TestUnitPerlApplication(unit.TestUnitApplicationPerl):
+
+ def setUpClass():
+ unit.TestUnit().check_modules('perl')
+
+ def test_perl_application(self):
+ self.load('variables')
+
+ body = 'Test body string.'
+
+ resp = self.post(headers={
+ 'Host': 'localhost',
+ 'Content-Type': 'text/html',
+ 'Custom-Header': 'blah'
+ }, body=body)
+
+ self.assertEqual(resp['status'], 200, 'status')
+ headers = resp['headers']
+ self.assertRegex(headers.pop('Server'), r'unit/[\d\.]+',
+ 'server header')
+ self.assertLess(abs(time.mktime(time.gmtime()) -
+ time.mktime(time.strptime(headers.pop('Date'),
+ '%a, %d %b %Y %H:%M:%S GMT'))), 5, 'date header')
+ self.assertDictEqual(headers, {
+ 'Content-Length': str(len(body)),
+ 'Content-Type': 'text/html',
+ 'Request-Method': 'POST',
+ 'Request-Uri': '/',
+ 'Http-Host': 'localhost',
+ 'Server-Protocol': 'HTTP/1.1',
+ 'Custom-Header': 'blah'
+ }, 'headers')
+ self.assertEqual(resp['body'], body, 'body')
+
+ def test_perl_application_query_string(self):
+ self.load('query_string')
+
+ resp = self.get(url='/?var1=val1&var2=val2')
+
+ self.assertEqual(resp['headers']['Query-String'], 'var1=val1&var2=val2',
+ 'Query-String header')
+
+ @unittest.expectedFailure
+ def test_perl_application_server_port(self):
+ self.load('server_port')
+
+ self.assertEqual(self.get()['headers']['Server-Port'], '7080',
+ 'Server-Port header')
+
+ def test_perl_application_input_read_empty(self):
+ self.load('input_read_empty')
+
+ self.assertEqual(self.get()['body'], '', 'read empty')
+
+ @unittest.expectedFailure
+ def test_perl_application_input_read_offset(self):
+ self.load('input_read_offset')
+
+ self.assertEqual(self.post(body='0123456789')['body'], '4567',
+ 'read offset')
+
+ def test_perl_application_input_copy(self):
+ self.load('input_copy')
+
+ body = '0123456789'
+ self.assertEqual(self.post(body=body)['body'], body, 'input copy')
+
+ def test_perl_application_errors_print(self):
+ self.load('errors_print')
+
+ self.assertEqual(self.get()['body'], '1', 'errors result')
+
+ with open(self.testdir + '/unit.log', 'r') as f:
+ m = re.search('Error in application', f.read())
+
+ self.assertIsNotNone(m, 'errors log')
+
+ def test_perl_application_header_pairs(self):
+ self.load('header_pairs')
+
+ self.assertEqual(self.get()['headers']['blah'], 'blah', 'header pairs')
+
+ def test_perl_application_body_empty(self):
+ self.load('body_empty')
+
+ self.assertEqual(self.get()['body'], '0\r\n\r\n', 'body empty')
+
+ def test_perl_application_body_array(self):
+ self.load('body_array')
+
+ self.assertEqual(self.get()['body'], '0123456789', 'body array')
+
+ def test_perl_application_body_large(self):
+ self.load('variables')
+
+ body = '0123456789' * 1000
+
+ resp = self.get(body=body)['body']
+
+ self.assertEqual(resp, body, 'body large')
+
+ def test_perl_application_body_io_empty(self):
+ self.load('body_io_empty')
+
+ self.assertEqual(self.get()['status'], 200, 'body io empty')
+
+ def test_perl_application_body_io_file(self):
+ self.load('body_io_file')
+
+ self.assertEqual(self.get()['body'], 'body\n', 'body io file')
+
+if __name__ == '__main__':
+ unittest.main()
diff --git a/test/unit.py b/test/unit.py
index bb09338c..81221a39 100644
--- a/test/unit.py
+++ b/test/unit.py
@@ -292,3 +292,25 @@ class TestUnitControl(TestUnitHTTP):
sock_type='unix',
addr=self.testdir + '/control.unit.sock'
)['body'])
+
+class TestUnitApplicationProto(TestUnitControl):
+
+ current_dir = os.path.dirname(os.path.abspath(__file__))
+
+class TestUnitApplicationPerl(TestUnitApplicationProto):
+ def load(self, dir, name='psgi.pl'):
+ self.conf({
+ "listeners": {
+ "*:7080": {
+ "application": dir
+ }
+ },
+ "applications": {
+ dir: {
+ "type": "perl",
+ "processes": { "spare": 0 },
+ "working_directory": self.current_dir + '/perl/' + dir,
+ "script": self.current_dir + '/perl/' + dir + '/' + name
+ }
+ }
+ })