diff options
Diffstat (limited to '')
-rw-r--r-- | test/perl/body_array/psgi.pl | 5 | ||||
-rw-r--r-- | test/perl/body_empty/psgi.pl | 5 | ||||
-rw-r--r-- | test/perl/body_io_empty/psgi.pl | 9 | ||||
-rw-r--r-- | test/perl/body_io_file/file | 1 | ||||
-rw-r--r-- | test/perl/body_io_file/psgi.pl | 7 | ||||
-rw-r--r-- | test/perl/errors_print/psgi.pl | 7 | ||||
-rw-r--r-- | test/perl/header_pairs/psgi.pl | 5 | ||||
-rw-r--r-- | test/perl/input_copy/psgi.pl | 10 | ||||
-rw-r--r-- | test/perl/input_read_empty/psgi.pl | 7 | ||||
-rw-r--r-- | test/perl/input_read_offset/psgi.pl | 7 | ||||
-rw-r--r-- | test/perl/query_string/psgi.pl | 8 | ||||
-rw-r--r-- | test/perl/server_port/psgi.pl | 8 | ||||
-rw-r--r-- | test/perl/variables/psgi.pl | 16 | ||||
-rw-r--r-- | test/test_perl_application.py | 118 | ||||
-rw-r--r-- | test/unit.py | 22 |
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 + } + } + }) |