Browse Source

Merge pull request #967 from hamiltont/mojo

Add MongoDB to Travis-CI verification suite
Hamilton Turner 11 years ago
parent
commit
6697689ff8

+ 5 - 5
mojolicious/app.pl

@@ -18,10 +18,10 @@ app->config->{hypnotoad}{workers} = app->config->{workers};
 
 # Database connections
 
-helper mango   => sub { state $mango = Mango->new('mongodb://'. shift->config->{database_host} . ':27017') };
+helper mango   => sub { state $mango = Mango->new('mongodb://'. shift->config->{database_host}) };
 helper db      => sub { state $db = shift->mango->db('hello_world') };
-helper world   => sub { shift->db->collection('World') };
-helper fortune => sub { shift->db->collection('Fortune') };
+helper world   => sub { shift->db->collection('world') };
+helper fortune => sub { shift->db->collection('fortune') };
 
 # JSON::XS renderer
 
@@ -35,7 +35,7 @@ get '/db' => sub { shift->render_query(1) };
 
 get '/queries' => sub {
   my $c = shift;
-  $c->render_query($c->param('queries'));
+  $c->render_query(scalar $c->param('queries'));
 };
 
 get '/fortunes' => sub {
@@ -50,7 +50,7 @@ get '/fortunes' => sub {
 
 get '/updates' => sub {
   my $c = shift;
-  $c->render_query($c->param('queries'), 1);
+  $c->render_query(scalar $c->param('queries'), 1);
 };
 
 get '/plaintext' => sub { shift->render( text => 'Hello, World!' ) };

+ 5 - 0
mojolicious/bash_profile.sh

@@ -0,0 +1,5 @@
+#!/bin/bash
+
+export PERL_HOME=${IROOT}/perl-5.18
+
+export PATH="$PERL_HOME/bin:$PATH"

+ 2 - 2
mojolicious/benchmark_config

@@ -5,9 +5,9 @@
       "setup_file": "setup",
       "json_url": "/json",
       "db_url": "/db",
-      "query_url": "/queries",
+      "query_url": "/queries?queries=",
       "fortune_url": "/fortunes",
-      "update_url": "/updates",
+      "update_url": "/updates?queries=",
       "plaintext_url": "/plaintext",
       "port": 8080,
       "approach": "Realistic",

+ 8 - 0
mojolicious/install.sh

@@ -1,3 +1,11 @@
 #!/bin/bash
 
 fw_depends perl
+
+# Ensure Mango and Mojolicious are installed
+fw_get http://cpanmin.us -O cpanminus.pl
+echo Got cpanm
+perl-5.18/bin/perl cpanminus.pl --notest --no-man-page App::cpanminus
+echo installed cpanm
+perl-5.18/bin/cpanm --notest --no-man-page Mojolicious Mango
+echo installed mango

+ 0 - 3
mojolicious/setup.py

@@ -1,12 +1,9 @@
 import subprocess
 import sys
 import json
-from os.path import expanduser
 import os
 import getpass
 
-home = expanduser("~")
-
 def start(args, logfile, errfile):
   conf = { 
     'database_host' : args.database_host,

+ 20 - 3
toolset/run-ci.py

@@ -71,6 +71,7 @@ class CIRunnner:
     # Travis-CI only has some supported databases
     validtests = [t for t in osvalidtests if t.database.lower() == "mysql"
                   or t.database.lower() == "postgres"
+                  or t.database.lower() == "mongodb"
                   or t.database.lower() == "none"]
     log.info("Found %s tests (%s for linux, %s for linux and mysql) in directory '%s'", 
       len(dirtests), len(osvalidtests), len(validtests), testdir)
@@ -171,7 +172,15 @@ class CIRunnner:
     log.info("Setting up Travis-CI")
     
     script = '''
+    # Needed to download latest MongoDB
+    sudo apt-key adv --keyserver hkp://keyserver.ubuntu.com:80 --recv 7F0CEB10
+    echo 'deb http://downloads-distro.mongodb.org/repo/ubuntu-upstart dist 10gen' | sudo tee /etc/apt/sources.list.d/mongodb.list
+
     sudo apt-get update
+    
+    # MongoDB takes a good 30-45 seconds to turn on, so install it first
+    sudo apt-get install mongodb-org
+
     sudo apt-get install openssh-server
 
     # Run as travis user (who already has passwordless sudo)
@@ -179,9 +188,12 @@ class CIRunnner:
     cat /home/travis/.ssh/id_rsa.pub > /home/travis/.ssh/authorized_keys
     chmod 600 /home/travis/.ssh/authorized_keys
 
-    # Setup database manually
-    # NOTE: Do not run database installation! It restarts mysql with a different
-    # configuration and will break travis's mysql setup
+    # =============Setup Databases===========================
+    # NOTE: Do not run `--install database` in travis-ci! 
+    #       It changes DB configuration files and will break everything
+    # =======================================================
+
+    # Add data to mysql
     mysql -uroot < config/create.sql
 
     # Setup Postgres
@@ -189,6 +201,11 @@ class CIRunnner:
     sudo useradd benchmarkdbuser -p benchmarkdbpass
     sudo -u postgres psql template1 < config/create-postgres-database.sql
     sudo -u benchmarkdbuser psql hello_world < config/create-postgres.sql
+
+    # Setup MongoDB (see install above)
+    mongod --version
+    until nc -z localhost 27017 ; do echo Waiting for MongoDB; sleep 1; done
+    mongo < config/create.js
     '''
 
     def sh(command):

+ 1 - 1
toolset/setup/linux/installer.py

@@ -181,7 +181,7 @@ class Installer:
     sudo cp 10gen.list /etc/apt/sources.list.d/10gen.list
     sudo apt-get -y update
     sudo apt-get -y remove mongodb-clients
-    sudo apt-get -y install mongodb-10gen
+    sudo apt-get -y install mongodb-org
 
     sudo stop mongodb
     sudo mv /etc/mongodb.conf /etc/mongodb.conf.orig

+ 6 - 1
toolset/setup/linux/prerequisites.sh

@@ -6,6 +6,11 @@ RETCODE=$(fw_exists fwbm_prereqs_installed)
   return 0; 
 }
 
+
+# Use a more recent version of Mongo shell
+sudo apt-key adv --keyserver hkp://keyserver.ubuntu.com:80 --recv 7F0CEB10
+echo 'deb http://downloads-distro.mongodb.org/repo/ubuntu-upstart dist 10gen' | sudo tee /etc/apt/sources.list.d/mongodb.list
+
 sudo apt-get -y update
 sudo apt-get -y upgrade
 
@@ -18,7 +23,7 @@ sudo apt-get -y install \
   libpcre3 libpcre3-dev libpcrecpp0 `# Regular expression support` \
   libssl-dev libcurl4-openssl-dev   `# SSL libraries` \
   libmysqlclient-dev \
-  mongodb-clients \
+  mongodb-org-shell \
   libsqlite3-dev sqlite3            `# Database libraries` \
   zlib1g-dev python-software-properties \
   libreadline6-dev \