Explorar el Código

Add postgres tests to hapi

Zane Kansil hace 10 años
padre
commit
79a506e6a4

+ 21 - 0
frameworks/JavaScript/hapi/benchmark_config.json

@@ -61,6 +61,27 @@
       "display_name": "hapi",
       "notes": "",
       "versus": "node"
+    },
+    "postgres": {
+      "setup_file": "setup",
+      "db_url": "/sequelize-pg/db",
+      "query_url": "/sequelize-pg/queries?queries=",
+      "fortune_url": "/sequelize-pg/fortunes",
+      "update_url": "/sequelize-pg/updates?queries=",
+      "port": 8080,
+      "approach": "Realistic",
+      "classification": "Micro",
+      "database": "Postgres",
+      "framework": "hapi",
+      "language": "JavaScript",
+      "orm": "Full",
+      "platform": "nodejs",
+      "webserver": "None",
+      "os": "Linux",
+      "database_os": "Linux",
+      "display_name": "hapi",
+      "notes": "",
+      "versus": "node"
     }
   }]
 }

+ 6 - 0
frameworks/JavaScript/hapi/create-server.js

@@ -13,6 +13,7 @@ server.views({
 
 var MongooseHandler = require('./handlers/mongoose');
 var SequelizeHandler = require('./handlers/sequelize');
+var SequelizePgHandler = require('./handlers/sequelize-postgres');
 
 Route('/json', JsonSerialization);
 Route('/plaintext', Plaintext);
@@ -27,6 +28,11 @@ Route('/sequelize/queries', SequelizeHandler.MultipleQueries);
 Route('/sequelize/fortunes', SequelizeHandler.Fortunes);
 Route('/sequelize/updates', SequelizeHandler.Updates);
 
+Route('/sequelize-pg/db', SequelizePgHandler.SingleQuery);
+Route('/sequelize-pg/queries', SequelizePgHandler.MultipleQueries);
+Route('/sequelize-pg/fortunes', SequelizePgHandler.Fortunes);
+Route('/sequelize-pg/updates', SequelizePgHandler.Updates);
+
 function JsonSerialization(req, reply) {
   reply({ message: 'Hello, World!' })
     .header('Server', 'hapi');

+ 117 - 0
frameworks/JavaScript/hapi/handlers/sequelize-postgres.js

@@ -0,0 +1,117 @@
+// Connects to Postgres using the sequelize driver
+// Handles related routes
+
+var h = require('../helper');
+var Promise = require('bluebird');
+var Sequelize = require('sequelize');
+
+var sequelize = new Sequelize('hello_world', 'benchmarkdbuser', 'benchmarkdbpass', {
+  host: '127.0.0.1',
+  dialect: 'postgres',
+  logging: false
+});
+
+var Worlds = sequelize.define('World', {
+  id:           { type: 'Sequelize.INTEGER' },
+  randomnumber: { type: 'Sequelize.INTEGER' }
+}, {
+  timestamps: false,
+  freezeTableName: true
+});
+
+var Fortunes = sequelize.define('Fortune', {
+  id:           { type: 'Sequelize.INTEGER' },
+  message:      { type: 'Sequelize.STRING' }
+}, {
+  timestamps: false,
+  freezeTableName: true
+});
+
+var randomWorldPromise = function() {
+  return Worlds.findOne({
+    where: { id: h.randomTfbNumber() }
+  }).then(function (results) {
+    return results;
+  }).catch(function (err) {
+    console.log(err.stack);
+  });
+}
+
+module.exports = {
+
+  SingleQuery: function (req, reply) {
+    randomWorldPromise().then(function (world) {
+      reply(world)
+        .header('Server', 'hapi');
+    })
+  },
+
+  MultipleQueries: function (req, reply) {
+    var queries = h.getQueries(req);
+    var worldPromises = [];
+
+    for (var i = 0; i < queries; i++) {
+      worldPromises.push(randomWorldPromise());
+    }
+
+    Promise.all(worldPromises).then(function (worlds) {
+      reply(worlds)
+        .header('Server', 'hapi');
+    });
+  },
+
+  Fortunes: function (req, reply) {
+    Fortunes.findAll().then(function (fortunes) {
+      fortunes.push(h.ADDITIONAL_FORTUNE);
+      fortunes.sort(function (a, b) {
+        return a.message.localeCompare(b.message);
+      });
+
+      reply.view('fortunes', {
+        fortunes: fortunes
+      })
+        .header('Content-Type', 'text/html')
+        .header('Server', 'hapi');
+    }).catch(function (err) {
+      console.log(err.stack);
+    }); 
+  },
+
+  Updates: function (req, reply) {
+    var queries = h.getQueries(req);
+    var worldPromises = [];
+
+    for (var i = 0; i < queries; i++) {
+      worldPromises.push(randomWorldPromise());
+    }
+
+    var worldUpdate = function (world) {
+      world.randomNumber = h.randomTfbNumber();
+
+      return Worlds.update(
+          { randomNumber: world.randomNumber },
+          { where: { id: world.id } }
+        )
+        .then(function (results) {
+            return world;
+          })
+        .catch(function (err) {
+            console.log(err.stack);
+          });
+    }
+
+    Promise
+      .all(worldPromises)
+      .map(function (world) {
+        return worldUpdate(world);
+      })
+      .then(function (updated) {
+        reply(updated)
+          .header('Server', 'hapi')
+      })
+      .catch(function (e) {
+        console.log(err.stack);
+      });
+  }
+
+};

+ 3 - 0
frameworks/JavaScript/hapi/handlers/sequelize.js

@@ -1,3 +1,6 @@
+// Connects to MySQL using the sequelize driver
+// Handles related routes
+
 var h = require('../helper');
 var Promise = require('bluebird');
 

+ 2 - 0
frameworks/JavaScript/hapi/package.json

@@ -9,6 +9,8 @@
     "hapi": "8.6.0",
     "mongoose": "4.0.4",
     "mysql": "2.7.0",
+    "pg": "^4.3.0",
+    "pg-hstore": "^2.3.2",
     "sequelize": "3.1.1"
   }
 }