From 9894e7afaae16cc0699afbe839681e023afee65a Mon Sep 17 00:00:00 2001 From: Christopher Smith Date: Fri, 22 Mar 2013 17:59:23 +0000 Subject: extend TestRequest class to test fetch & detail; add a test to check it does --- _test/tests/test/basic.test.php | 18 ++++++++++++++++++ 1 file changed, 18 insertions(+) (limited to '_test/tests') diff --git a/_test/tests/test/basic.test.php b/_test/tests/test/basic.test.php index a0ea48a3a..c40f2d574 100644 --- a/_test/tests/test/basic.test.php +++ b/_test/tests/test/basic.test.php @@ -101,5 +101,23 @@ class InttestsBasicTest extends DokuWikiTest { $this->assertTrue(strpos($response->getContent(), 'Andreas Gohr') >= 0); } + function testScripts() { + $request = new TestRequest(); + + // doku + $response = $request->get(); + $this->assertEquals('doku.php',$request->getScript()); + + $response = $request->get(array(),'/doku.php?id=wiki:dokuwiki&test=foo'); + $this->assertEquals('doku.php',$request->getScript()); + + // fetch + $response = $request->get(array(),'/lib/exe/fetch.php?media=wiki:dokuwiki-128.png'); + $this->assertEquals('lib/exe/fetch.php',$request->getScript()); + + // detail + $response = $request->get(array(),'/lib/exe/detail.php?id=start&media=wiki:dokuwiki-128.png'); + $this->assertEquals('lib/exe/detail.php',$request->getScript()); + } } -- cgit v1.2.3 From fb0b3fbf03223c8c304608cdb32ee5c9d755eca1 Mon Sep 17 00:00:00 2001 From: Christopher Smith Date: Fri, 22 Mar 2013 18:01:45 +0000 Subject: update TestResponse class to return specific headers & status codes (with tests) --- _test/tests/test/basic.test.php | 41 +++++++++++++++++++++++++++++++++++++++++ 1 file changed, 41 insertions(+) (limited to '_test/tests') diff --git a/_test/tests/test/basic.test.php b/_test/tests/test/basic.test.php index c40f2d574..1c9d6d516 100644 --- a/_test/tests/test/basic.test.php +++ b/_test/tests/test/basic.test.php @@ -4,6 +4,24 @@ * @group integration */ class InttestsBasicTest extends DokuWikiTest { + + private $some_headers = array( + 'Content-Type: image/png', + 'Date: Fri, 22 Mar 2013 16:10:01 GMT', + 'X-Powered-By: PHP/5.3.15', + 'Expires: Sat, 23 Mar 2013 17:03:46 GMT', + 'Cache-Control: public, proxy-revalidate, no-transform, max-age=86400', + 'Pragma: public', + 'Last-Modified: Fri, 22 Mar 2013 01:48:28 GMT', + 'ETag: "63daab733b38c30c337229b2e587f8fb"', + 'Content-Disposition: inline; filename="fe389b0db8c1088c336abb502d2f9ae7.media.200x200.png', + 'Accept-Ranges: bytes', + 'Content-Type: image/png', + 'Content-Length: 62315', + 'Status: 200 OK', + 'Status: 404 Not Found', + ); + /** * Execute the simplest possible request and expect * a dokuwiki page which obviously has the word "DokuWiki" @@ -120,4 +138,27 @@ class InttestsBasicTest extends DokuWikiTest { $this->assertEquals('lib/exe/detail.php',$request->getScript()); } + function testHeaders(){ + $request = new TestRequest(); + $response = $request->get(array(),'/lib/exe/fetch.php?media=wiki:dokuwiki-128.png'); + $headers = $response->getHeaders(); + $this->assertTrue(!empty($headers)); + } + + function testGetHeader(){ + $response = new TestResponse('',$this->some_headers); + + $this->assertEquals('Pragma: public', $response->getHeader('Pragma')); + $this->assertEmpty($response->getHeader('Junk')); + $this->assertEquals(array('Content-Type: image/png','Content-Type: image/png'), $response->getHeader('Content-Type')); + } + + function testGetStatus(){ + $response = new TestResponse('',$this->some_headers); + $this->assertEquals(404, $response->getStatusCode()); + + $response = new TestResponse('',array_slice($this->some_headers,0,-2)); // slide off the last two headers to leave no status header + $this->assertNull($response->getStatusCode()); + } + } -- cgit v1.2.3 From f56bb251b5bdb3bb4f2793e921cf479d2402a47c Mon Sep 17 00:00:00 2001 From: Christopher Smith Date: Fri, 22 Mar 2013 18:02:15 +0000 Subject: add test for fetch using image tokens --- _test/tests/lib/exe/fetch_imagetoken.test.php | 83 +++++++++++++++++++++++++++ 1 file changed, 83 insertions(+) create mode 100644 _test/tests/lib/exe/fetch_imagetoken.test.php (limited to '_test/tests') diff --git a/_test/tests/lib/exe/fetch_imagetoken.test.php b/_test/tests/lib/exe/fetch_imagetoken.test.php new file mode 100644 index 000000000..f94e0479b --- /dev/null +++ b/_test/tests/lib/exe/fetch_imagetoken.test.php @@ -0,0 +1,83 @@ +width ? 'w='.$this->width.'&' : ''; + $h = $this->height ? 'h='.$this->height.'&' : ''; + + return '/lib/exe/fetch.php?'.$w.$h.'{%token%}media='.$this->media; + } + + function fetchResponse($token){ + $request = new TestRequest(); + return $request->get(array(),str_replace('{%token%}',$token,$this->getUri())); + } + + /** + * modified image request with valid token + * expect: header with mime-type + * expect: content + * expect: no error response + */ + function test_valid_token(){ + $valid_token = 'tok='.media_get_token($this->media, $this->width, $this->height).'&'; + $response = $this->fetchResponse($valid_token); + $this->assertTrue((bool)$response->getHeader('Content-Type')); + $this->assertTrue((bool)($response->getContent())); + + $status_code = $response->getStatusCode(); + $this->assertTrue(is_null($status_code) || (200 == $status_code)); + } + + /** + * modified image request with invalid token + * expect: 412 status code + */ + function test_invalid_token(){ + $invalid_token = 'tok='.media_get_token('junk',200,100).'&'; + $this->assertEquals(412,$this->fetchResponse($invalid_token)->getStatusCode()); + } + + /** + * modified image request with no token + * expect: 412 status code + */ + function test_missing_token(){ + $no_token = ''; + $this->assertEquals(412,$this->fetchResponse($notoken)->getStatusCode()); + } + + /** + * native image request which doesn't require a token + */ + function test_no_token_required(){ + $this->width = $this->height = 0; // no width & height, means image request at native dimensions + $any_token = 'tok='.media_get_token('junk',200,100).'&'; + $no_token = ''; + + foreach(array($any_token, $no_token) as $token) { + $response = $this->fetchResponse($token); + $this->assertTrue((bool)$response->getHeader('Content-Type')); + $this->assertTrue((bool)($response->getContent())); + + $status_code = $response->getStatusCode(); + $this->assertTrue(is_null($status_code) || (200 == $status_code)); + } + } + +} +//Setup VIM: ex: et ts=4 : -- cgit v1.2.3 From 3e8bad3a1f8b5d065e170bb12dd224bf18de6897 Mon Sep 17 00:00:00 2001 From: Christopher Smith Date: Fri, 22 Mar 2013 18:49:11 +0000 Subject: add some dependency checks with test skips to fetch tests and tests which use TestResponse::headers --- _test/tests/lib/exe/fetch_imagetoken.test.php | 20 ++++++++++++++++++-- _test/tests/test/basic.test.php | 10 +++++++++- 2 files changed, 27 insertions(+), 3 deletions(-) (limited to '_test/tests') diff --git a/_test/tests/lib/exe/fetch_imagetoken.test.php b/_test/tests/lib/exe/fetch_imagetoken.test.php index f94e0479b..9e5b6e4a2 100644 --- a/_test/tests/lib/exe/fetch_imagetoken.test.php +++ b/_test/tests/lib/exe/fetch_imagetoken.test.php @@ -7,6 +7,19 @@ class fetch_imagetoken_test extends DokuWikiTest { private $height = 0; function setUp() { + // check we can carry out these tests + if (!file_exists(mediaFN($this->media))) { + $this->markTestSkipped('Source image required for test'); + } + + header('X-Test: check headers working'); + $header_check = function_exists('xdebug_get_headers') ? xdebug_get_headers() : headers_list(); + if (empty($header_check)) { + $this->markTestSkipped('headers not returned, perhaps your sapi does not return headers, try xdebug'); + } else { + header_remove('X-Test'); + } + parent::setUp(); global $conf; @@ -35,7 +48,7 @@ class fetch_imagetoken_test extends DokuWikiTest { */ function test_valid_token(){ $valid_token = 'tok='.media_get_token($this->media, $this->width, $this->height).'&'; - $response = $this->fetchResponse($valid_token); + $response = $this->fetchResponse($valid_token); $this->assertTrue((bool)$response->getHeader('Content-Type')); $this->assertTrue((bool)($response->getContent())); @@ -63,16 +76,19 @@ class fetch_imagetoken_test extends DokuWikiTest { /** * native image request which doesn't require a token + * try: with a token & without a token + * expect: (for both) header with mime-type, content matching source image filesize & no error response */ function test_no_token_required(){ $this->width = $this->height = 0; // no width & height, means image request at native dimensions $any_token = 'tok='.media_get_token('junk',200,100).'&'; $no_token = ''; + $bytes = filesize(mediaFN($this->media)); foreach(array($any_token, $no_token) as $token) { $response = $this->fetchResponse($token); $this->assertTrue((bool)$response->getHeader('Content-Type')); - $this->assertTrue((bool)($response->getContent())); + $this->assertEquals(strlen($response->getContent()), $bytes); $status_code = $response->getStatusCode(); $this->assertTrue(is_null($status_code) || (200 == $status_code)); diff --git a/_test/tests/test/basic.test.php b/_test/tests/test/basic.test.php index 1c9d6d516..05778ccf9 100644 --- a/_test/tests/test/basic.test.php +++ b/_test/tests/test/basic.test.php @@ -139,6 +139,14 @@ class InttestsBasicTest extends DokuWikiTest { } function testHeaders(){ + header('X-Test: check headers working'); + $header_check = function_exists('xdebug_get_headers') ? xdebug_get_headers() : headers_list(); + if (empty($header_check)) { + $this->markTestSkipped('headers not returned, perhaps your sapi does not return headers, try xdebug'); + } else { + header_remove('X-Test'); + } + $request = new TestRequest(); $response = $request->get(array(),'/lib/exe/fetch.php?media=wiki:dokuwiki-128.png'); $headers = $response->getHeaders(); @@ -157,7 +165,7 @@ class InttestsBasicTest extends DokuWikiTest { $response = new TestResponse('',$this->some_headers); $this->assertEquals(404, $response->getStatusCode()); - $response = new TestResponse('',array_slice($this->some_headers,0,-2)); // slide off the last two headers to leave no status header + $response = new TestResponse('',array_slice($this->some_headers,0,-2)); // slice off the last two headers to leave no status header $this->assertNull($response->getStatusCode()); } -- cgit v1.2.3 From 33b8a94705bfbd34fbee5ed24982374e166a80d0 Mon Sep 17 00:00:00 2001 From: Andreas Gohr Date: Sun, 24 Mar 2013 13:09:30 +0100 Subject: stream select parameters need to be reset for each call --- _test/tests/inc/httpclient_http.test.php | 11 +++++++++++ 1 file changed, 11 insertions(+) (limited to '_test/tests') diff --git a/_test/tests/inc/httpclient_http.test.php b/_test/tests/inc/httpclient_http.test.php index 252eb6b65..387eb53aa 100644 --- a/_test/tests/inc/httpclient_http.test.php +++ b/_test/tests/inc/httpclient_http.test.php @@ -204,5 +204,16 @@ class httpclient_http_test extends DokuWikiTest { $this->assertFalse($data === false, 'HTTP response'); $this->assertEquals(2550,strlen($data)); } + + /** + * This address caused trouble with stream_select() + * + * @group internet + */ + function test_wikimatrix(){ + $http = new HTTPClient(); + $data = $http->get('http://www.wikimatrix.org/cfeed/dokuwiki/-/-'); + $this->assertTrue($data !== false, $http->error); + } } //Setup VIM: ex: et ts=4 : -- cgit v1.2.3 From a3d0aa224c509ed311955813d6eb459d1dc141c8 Mon Sep 17 00:00:00 2001 From: Christopher Smith Date: Mon, 6 May 2013 01:03:17 +0100 Subject: add some tests for ml() --- _test/tests/inc/common_ml.test.php | 77 ++++++++++++++++++++++++++++++++++++++ 1 file changed, 77 insertions(+) create mode 100644 _test/tests/inc/common_ml.test.php (limited to '_test/tests') diff --git a/_test/tests/inc/common_ml.test.php b/_test/tests/inc/common_ml.test.php new file mode 100644 index 000000000..ac4158540 --- /dev/null +++ b/_test/tests/inc/common_ml.test.php @@ -0,0 +1,77 @@ +assertEquals(DOKU_BASE . $this->script . '?media=' , ml()); + } + + function test_ml_args_array() { + global $conf; + $conf['useslash'] = 0; + $conf['userewrite'] = 0; + + $args = array('a' => 'b', 'c' => 'd', 'q' => '&รค'); + + $expect = DOKU_BASE . $this->script . '?a=b&c=d&q=%26%C3%A4&media=some:'; + $this->assertEquals($expect, ml('some:', $args)); + } + + function test_ml_args_string() { + global $conf; + $conf['useslash'] = 0; + $conf['userewrite'] = 0; + + $args = 'a=b&c=d'; + + $expect = DOKU_BASE . $this->script . '?a=b&c=d&media=some:'; + $this->assertEquals($expect, ml('some:', $args)); + } + + function test_ml_args_comma_string() { + global $conf; + $conf['useslash'] = 0; + $conf['userewrite'] = 0; + + $args = 'a=b,c=d'; + + $expect = DOKU_BASE . $this->script . '?a=b&c=d&media=some:'; + $this->assertEquals($expect, ml('some:', $args)); + } + + + function test_ml_imgresize_array() { + global $conf; + $conf['useslash'] = 0; + $conf['userewrite'] = 0; + + $id = 'some:'; + $w = 80; + $args = array('w' => $w); + $tok = media_get_token($id,$w,0); + + $expect = DOKU_BASE . $this->script . '?w='.$w.'&tok='.$tok.'&media='.$id; + $this->assertEquals($expect, ml($id, $args)); + } + + function test_ml_imgresize_string() { + global $conf; + $conf['useslash'] = 0; + $conf['userewrite'] = 0; + + $id = 'some:'; + $w = 80; + $args = 'w='.$w; + $tok = media_get_token($id,$w,0); + + $expect = DOKU_BASE . $this->script . '?w='.$w.'&tok='.$tok.'&media='.$id; + $this->assertEquals($expect, ml($id, $args)); + } +} \ No newline at end of file -- cgit v1.2.3 From c3ff531efb93a30dc680ead0baac2a0d628827e4 Mon Sep 17 00:00:00 2001 From: Andreas Gohr Date: Mon, 6 May 2013 09:22:06 +0200 Subject: fixed test name --- _test/tests/inc/common_ml.test.php | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) (limited to '_test/tests') diff --git a/_test/tests/inc/common_ml.test.php b/_test/tests/inc/common_ml.test.php index ac4158540..0abfde37a 100644 --- a/_test/tests/inc/common_ml.test.php +++ b/_test/tests/inc/common_ml.test.php @@ -1,6 +1,6 @@ script . '?w='.$w.'&tok='.$tok.'&media='.$id; $this->assertEquals($expect, ml($id, $args)); } -} \ No newline at end of file +} -- cgit v1.2.3 From 0aa90d9aa7210ab4df4b96f23a9fc8045e572131 Mon Sep 17 00:00:00 2001 From: Andreas Gohr Date: Thu, 9 May 2013 14:53:36 +0200 Subject: tar library: another fix for lone zero blocks --- _test/tests/inc/tar.test.php | 44 ++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 44 insertions(+) (limited to '_test/tests') diff --git a/_test/tests/inc/tar.test.php b/_test/tests/inc/tar.test.php index e8805a75d..90bc2e49e 100644 --- a/_test/tests/inc/tar.test.php +++ b/_test/tests/inc/tar.test.php @@ -316,4 +316,48 @@ class Tar_TestCase extends DokuWikiTest { TestUtils::rdelete($out); } + + /** + * A single zero file should be just a header block + the footer + */ + public function test_zerofile(){ + $dir = dirname(__FILE__).'/tar'; + $tar = new Tar(); + $tar->create(); + $tar->addFile("$dir/zero.txt", 'zero.txt'); + $file = $tar->getArchive(Tar::COMPRESS_NONE); + + $this->assertEquals(512*3, strlen($file)); // 1 header block + 2 footer blocks + } + + public function test_zerodata(){ + $tar = new Tar(); + $tar->create(); + $tar->addData('zero.txt',''); + $file = $tar->getArchive(Tar::COMPRESS_NONE); + + $this->assertEquals(512*3, strlen($file)); // 1 header block + 2 footer blocks + } + + /** + * A file of exactly one block should be just a header block + data block + the footer + */ + public function test_blockfile(){ + $dir = dirname(__FILE__).'/tar'; + $tar = new Tar(); + $tar->create(); + $tar->addFile("$dir/block.txt", 'block.txt'); + $file = $tar->getArchive(Tar::COMPRESS_NONE); + + $this->assertEquals(512*4, strlen($file)); // 1 header block + data block + 2 footer blocks + } + + public function test_blockdata(){ + $tar = new Tar(); + $tar->create(); + $tar->addData('block.txt', str_pad('', 512, 'x')); + $file = $tar->getArchive(Tar::COMPRESS_NONE); + + $this->assertEquals(512*4, strlen($file)); // 1 header block + data block + 2 footer blocks + } } \ No newline at end of file -- cgit v1.2.3 From a27d8c740b9130905209f802a85643fd97e78996 Mon Sep 17 00:00:00 2001 From: Andreas Gohr Date: Thu, 9 May 2013 15:07:31 +0200 Subject: added missing test case files --- _test/tests/inc/tar/block.txt | 1 + _test/tests/inc/tar/zero.txt | 0 2 files changed, 1 insertion(+) create mode 100644 _test/tests/inc/tar/block.txt create mode 100644 _test/tests/inc/tar/zero.txt (limited to '_test/tests') diff --git a/_test/tests/inc/tar/block.txt b/_test/tests/inc/tar/block.txt new file mode 100644 index 000000000..9b2f53080 --- /dev/null +++ b/_test/tests/inc/tar/block.txt @@ -0,0 +1 @@ +xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx \ No newline at end of file diff --git a/_test/tests/inc/tar/zero.txt b/_test/tests/inc/tar/zero.txt new file mode 100644 index 000000000..e69de29bb -- cgit v1.2.3