diff --git a/.drone.yml b/.drone.yml new file mode 100644 index 0000000..2f0aeae --- /dev/null +++ b/.drone.yml @@ -0,0 +1,35 @@ +kind: pipeline +type: docker +name: testsuite + +steps: + +- name: composer install + image: chialab/php + commands: + - composer install + volumes: + - name: composer-cache + path: /root/.composer/cache/ + +- name: wait for test server + image: alpine + commands: + - echo "Waiting for server to launch on testserver:8080..." + - while ! nc -z testserver 8080; do sleep 0.1 ; done + - echo "Ready!" + +- name: run tests + image: chialab/php + commands: + - URL=http://testserver:8080 vendor/bin/phpunit tests + +services: + +- name: testserver + image: node + detach: true + commands: + - cd tests/server/ + - npm install + - node server.js diff --git a/README.md b/README.md index 4246ac3..7cb3106 100644 --- a/README.md +++ b/README.md @@ -37,7 +37,8 @@ Start the test server, will listen on localhost:8080 ```plain cd tests/server -./start_server.sh +npm install +node server.js ``` Run the tests: diff --git a/tests/CrawlerTest.php b/tests/CrawlerTest.php index b31b37d..b42f3bc 100644 --- a/tests/CrawlerTest.php +++ b/tests/CrawlerTest.php @@ -6,188 +6,197 @@ use GuzzleHttp\RequestOptions; class CrawlerTest extends TestCase{ + private $url='http://localhost:8080'; + + public function __construct(){ + parent::__construct(); + if(getenv('URL')){ + $this->url=getenv('URL'); + } + } + public function testFullSite(){ $crawler=new Crawler([RequestOptions::CONNECT_TIMEOUT => 3, RequestOptions::TIMEOUT => 3]); - $crawler->crawl('http://localhost:8080/'); + $crawler->crawl($this->url); $sitemap=$crawler->getResults(); $this->assertTreeContains($sitemap,[ 'http://example.com/' => ['code' => 200], - 'http://localhost:8080/deeplink1' => ['code' => 200], - 'http://localhost:8080/deeplink2' => ['code' => 200], - 'http://localhost:8080/deeplink3' => ['code' => 200], - 'http://localhost:8080/externalLink' => ['code' => 200], - 'http://localhost:8080/found' => ['code' => 200], - 'http://localhost:8080/interlinked1' => ['code' => 200], - 'http://localhost:8080/interlinked2' => ['code' => 200], - 'http://localhost:8080/interlinked3' => ['code' => 200], - 'http://localhost:8080/internalServerError' => ['code' => 500], - 'http://localhost:8080/invalidStatusCode' => ['code' => '---'], - 'http://localhost:8080/notFound' => ['code' => 404], - 'http://localhost:8080/redirect1' => ['code' => 302], - 'http://localhost:8080/redirect2' => ['code' => 302], - 'http://localhost:8080/redirectLoop' => ['code' => '---'], - 'http://localhost:8080/redirectToFound' => ['code' => 302 ], - 'http://localhost:8080/redirectToNotFound' => ['code' => 302 ], - 'http://localhost:8080/redirectToRedirectToNotFound' => ['code' => 302], - 'http://localhost:8080/timeout' => ['code' => '---'], - 'http://localhost:8080/twoRedirectsToSameLocation' => ['code' => 200], + $this->url.'/deeplink1' => ['code' => 200], + $this->url.'/deeplink2' => ['code' => 200], + $this->url.'/deeplink3' => ['code' => 200], + $this->url.'/externalLink' => ['code' => 200], + $this->url.'/found' => ['code' => 200], + $this->url.'/interlinked1' => ['code' => 200], + $this->url.'/interlinked2' => ['code' => 200], + $this->url.'/interlinked3' => ['code' => 200], + $this->url.'/internalServerError' => ['code' => 500], + $this->url.'/invalidStatusCode' => ['code' => '---'], + $this->url.'/notFound' => ['code' => 404], + $this->url.'/redirect1' => ['code' => 302], + $this->url.'/redirect2' => ['code' => 302], + $this->url.'/redirectLoop' => ['code' => '---'], + $this->url.'/redirectToFound' => ['code' => 302 ], + $this->url.'/redirectToNotFound' => ['code' => 302 ], + $this->url.'/redirectToRedirectToNotFound' => ['code' => 302], + $this->url.'/timeout' => ['code' => '---'], + $this->url.'/twoRedirectsToSameLocation' => ['code' => 200], ], print_r($sitemap,true)); } public function testFound(){ $crawler=new Crawler(); - $crawler->crawl('http://localhost:8080/found'); + $crawler->crawl($this->url.'/found'); $sitemap=$crawler->getResults(); $this->assertTreeContains($sitemap,[ - 'http://localhost:8080/found' => ['code' => 200], + $this->url.'/found' => ['code' => 200], ], print_r($sitemap,true)); } public function testNotFound(){ $crawler=new Crawler(); - $crawler->crawl('http://localhost:8080/notFound'); + $crawler->crawl($this->url.'/notFound'); $sitemap=$crawler->getResults(); $this->assertTreeContains($sitemap,[ - 'http://localhost:8080/notFound' => ['code' => 404], + $this->url.'/notFound' => ['code' => 404], ], print_r($sitemap,true)); } public function testExternalLink(){ $crawler=new Crawler(); - $crawler->crawl('http://localhost:8080/externalLink'); + $crawler->crawl($this->url.'/externalLink'); $sitemap=$crawler->getResults(); $this->assertTreeContains($sitemap,[ - 'http://localhost:8080/externalLink' => ['code' => 200], + $this->url.'/externalLink' => ['code' => 200], 'http://example.com/' => ['code' => 200], ], print_r($sitemap,true)); } public function testDeeplink(){ $crawler=new Crawler(); - $crawler->crawl('http://localhost:8080/deeplink1'); + $crawler->crawl($this->url.'/deeplink1'); $sitemap=$crawler->getResults(); $this->assertTreeContains($sitemap,[ - 'http://localhost:8080/deeplink1' => ['code' => 200], - 'http://localhost:8080/deeplink2' => ['code' => 200], - 'http://localhost:8080/deeplink3' => ['code' => 200], + $this->url.'/deeplink1' => ['code' => 200], + $this->url.'/deeplink2' => ['code' => 200], + $this->url.'/deeplink3' => ['code' => 200], ], print_r($sitemap,true)); } public function testInterlinked(){ $crawler=new Crawler(); - $crawler->crawl('http://localhost:8080/interlinked1'); - $crawler->crawl('http://localhost:8080/interlinked4'); //this ensures the order or results for the URL tracking test PART2 + $crawler->crawl($this->url.'/interlinked1'); + $crawler->crawl($this->url.'/interlinked4'); //this ensures the order or results for the URL tracking test PART2 $sitemap=$crawler->getResults(); $this->assertTreeContains($sitemap,[ - 'http://localhost:8080/interlinked1' => ['code' => 200 , 'foundOn' => [ - 'http://localhost:8080/interlinked1' => 1, - 'http://localhost:8080/interlinked2' => 1, - 'http://localhost:8080/interlinked3' => 1, - 'http://localhost:8080/interlinked4' => 1, + $this->url.'/interlinked1' => ['code' => 200 , 'foundOn' => [ + $this->url.'/interlinked1' => 1, + $this->url.'/interlinked2' => 1, + $this->url.'/interlinked3' => 1, + $this->url.'/interlinked4' => 1, ]], - 'http://localhost:8080/interlinked2' => ['code' => 200 , 'foundOn' => [ - 'http://localhost:8080/interlinked1' => 1, - 'http://localhost:8080/interlinked2' => 1, - 'http://localhost:8080/interlinked3' => 1, - 'http://localhost:8080/interlinked4' => 1, + $this->url.'/interlinked2' => ['code' => 200 , 'foundOn' => [ + $this->url.'/interlinked1' => 1, + $this->url.'/interlinked2' => 1, + $this->url.'/interlinked3' => 1, + $this->url.'/interlinked4' => 1, ]], - 'http://localhost:8080/interlinked3' => ['code' => 200 , 'foundOn' => [ - 'http://localhost:8080/interlinked1' => 1, - 'http://localhost:8080/interlinked2' => 1, - 'http://localhost:8080/interlinked3' => 1, - 'http://localhost:8080/interlinked4' => 1, + $this->url.'/interlinked3' => ['code' => 200 , 'foundOn' => [ + $this->url.'/interlinked1' => 1, + $this->url.'/interlinked2' => 1, + $this->url.'/interlinked3' => 1, + $this->url.'/interlinked4' => 1, ]], - 'http://localhost:8080/found' => ['code' => 200 , 'foundOn' => [ - 'http://localhost:8080/interlinked1' => 1, - 'http://localhost:8080/interlinked2' => 1, - 'http://localhost:8080/interlinked3' => 1, - 'http://localhost:8080/interlinked4' => 1, + $this->url.'/found' => ['code' => 200 , 'foundOn' => [ + $this->url.'/interlinked1' => 1, + $this->url.'/interlinked2' => 1, + $this->url.'/interlinked3' => 1, + $this->url.'/interlinked4' => 1, ]], - 'http://localhost:8080/redirectToFound' => ['code' => 302 , 'foundOn' => [ - 'http://localhost:8080/interlinked1' => 1, - 'http://localhost:8080/interlinked2' => 1, - 'http://localhost:8080/interlinked3' => 1, - 'http://localhost:8080/interlinked4' => 1, + $this->url.'/redirectToFound' => ['code' => 302 , 'foundOn' => [ + $this->url.'/interlinked1' => 1, + $this->url.'/interlinked2' => 1, + $this->url.'/interlinked3' => 1, + $this->url.'/interlinked4' => 1, ]], ], print_r($sitemap,true)); } public function testRedirectToFound(){ $crawler=new Crawler(); - $crawler->crawl('http://localhost:8080/redirectToFound'); + $crawler->crawl($this->url.'/redirectToFound'); $sitemap=$crawler->getResults(); $this->assertTreeContains($sitemap,[ - 'http://localhost:8080/redirectToFound' => ['code' => 302], - 'http://localhost:8080/found' => ['code' => 200 ], + $this->url.'/redirectToFound' => ['code' => 302], + $this->url.'/found' => ['code' => 200 ], ], print_r($sitemap,true)); } public function testRedirectToNotFound(){ $crawler=new Crawler(); - $crawler->crawl('http://localhost:8080/redirectToNotFound'); + $crawler->crawl($this->url.'/redirectToNotFound'); $sitemap=$crawler->getResults(); $this->assertTreeContains($sitemap,[ - 'http://localhost:8080/redirectToNotFound' => ['code' => 302], - 'http://localhost:8080/notFound' => ['code' => 404 ], + $this->url.'/redirectToNotFound' => ['code' => 302], + $this->url.'/notFound' => ['code' => 404 ], ], print_r($sitemap,true)); } public function testRedirectToRedirectToNotFound(){ $crawler=new Crawler(); - $crawler->crawl('http://localhost:8080/redirectToRedirectToNotFound'); + $crawler->crawl($this->url.'/redirectToRedirectToNotFound'); $sitemap=$crawler->getResults(); $this->assertTreeContains($sitemap,[ - 'http://localhost:8080/redirectToRedirectToNotFound' => ['code' => 302], - 'http://localhost:8080/redirectToNotFound' => ['code' => 302], - 'http://localhost:8080/notFound' => ['code' => 404], + $this->url.'/redirectToRedirectToNotFound' => ['code' => 302], + $this->url.'/redirectToNotFound' => ['code' => 302], + $this->url.'/notFound' => ['code' => 404], ], print_r($sitemap,true)); } public function testTwoRedirectsToSameLocation(){ $crawler=new Crawler(); - $crawler->crawl('http://localhost:8080/twoRedirectsToSameLocation'); + $crawler->crawl($this->url.'/twoRedirectsToSameLocation'); $sitemap=$crawler->getResults(); $this->assertTreeContains($sitemap,[ - 'http://localhost:8080/twoRedirectsToSameLocation' => ['code' => 200], - 'http://localhost:8080/redirect1' => ['code' => 302], - 'http://localhost:8080/redirect2' => ['code' => 302], - 'http://localhost:8080/found' => ['code' => 200], + $this->url.'/twoRedirectsToSameLocation' => ['code' => 200], + $this->url.'/redirect1' => ['code' => 302], + $this->url.'/redirect2' => ['code' => 302], + $this->url.'/found' => ['code' => 200], ], print_r($sitemap,true)); } public function testTimeout(){ $crawler=new Crawler([RequestOptions::CONNECT_TIMEOUT => 3, RequestOptions::TIMEOUT => 3]); - $crawler->crawl('http://localhost:8080/timeout'); + $crawler->crawl($this->url.'/timeout'); $sitemap=$crawler->getResults(); $this->assertTreeContains($sitemap,[ - 'http://localhost:8080/timeout' => ['code' => '---'], + $this->url.'/timeout' => ['code' => '---'], ], print_r($sitemap,true)); } public function testRedirectLoop(){ $crawler=new Crawler(); - $crawler->crawl('http://localhost:8080/redirectLoop'); + $crawler->crawl($this->url.'/redirectLoop'); $sitemap=$crawler->getResults(); $this->assertTreeContains($sitemap,[ - 'http://localhost:8080/redirectLoop' => ['code' => '---'], + $this->url.'/redirectLoop' => ['code' => '---'], ], print_r($sitemap,true)); } public function testInternalServerError(){ $crawler=new Crawler(); - $crawler->crawl('http://localhost:8080/internalServerError'); + $crawler->crawl($this->url.'/internalServerError'); $sitemap=$crawler->getResults(); $this->assertTreeContains($sitemap,[ - 'http://localhost:8080/internalServerError' => ['code' => 500], + $this->url.'/internalServerError' => ['code' => 500], ], print_r($sitemap,true)); } public function testInvalidStatusCode(){ $crawler=new Crawler(); - $crawler->crawl('http://localhost:8080/invalidStatusCode'); + $crawler->crawl($this->url.'/invalidStatusCode'); $sitemap=$crawler->getResults(); $this->assertTreeContains($sitemap,[ - 'http://localhost:8080/invalidStatusCode' => ['code' => '---'], + $this->url.'/invalidStatusCode' => ['code' => '---'], ], print_r($sitemap,true)); } diff --git a/tests/server/start_server.sh b/tests/server/start_server.sh deleted file mode 100755 index 6f25d34..0000000 --- a/tests/server/start_server.sh +++ /dev/null @@ -1,13 +0,0 @@ -#!/usr/bin/env bash - -npm install - -if [ -z ${TRAVIS_JOB_ID} ]; then - # not running under travis, stay in foreground until stopped - node server.js -else - cd tests/server - - # running under travis, daemonize - (node server.js &) || /bin/true -fi