From 3abd4db425bdb2c89ceb3f38eb15942bc3ebaf1d Mon Sep 17 00:00:00 2001 From: cgeek <cem.moreau@gmail.com> Date: Sun, 16 Jun 2013 19:14:28 +0200 Subject: [PATCH] NodeCoin can now be installed via NPM and run (with no HTTP API implementation) --- bin/nodecoin | 18 ++++++ bin/server.js | 15 +++++ config.js | 3 + lib/main.js | 6 -- lib/nodecoin.js | 62 ++++++++++++++++++ lib/pks.js | 8 +++ lib/udc.js | 1 + package.json | 13 +++- test/main.js | 163 +++++++++++++++++++++++++++++++++++++++++++++--- 9 files changed, 272 insertions(+), 17 deletions(-) create mode 100755 bin/nodecoin create mode 100644 bin/server.js create mode 100644 config.js delete mode 100644 lib/main.js create mode 100644 lib/nodecoin.js create mode 100644 lib/pks.js create mode 100644 lib/udc.js diff --git a/bin/nodecoin b/bin/nodecoin new file mode 100755 index 000000000..1b7a6771d --- /dev/null +++ b/bin/nodecoin @@ -0,0 +1,18 @@ +#!/usr/bin/env node +var config = require('../config'), + http = require('http'), + nodecoin = require('../lib/nodecoin'), + program = require('commander'); + +program + .version('0.0.1') + .option('-p, --port <port>', 'Port to listen for requests', parseInt) + .parse(process.argv); + +config.server.port = program.port || config.server.port; + +var app = nodecoin.express.app(config); + +http.createServer(app).listen(app.get('port'), function(){ + console.log('NodeCoin server listening on port ' + app.get('port')); +}); \ No newline at end of file diff --git a/bin/server.js b/bin/server.js new file mode 100644 index 000000000..727feb359 --- /dev/null +++ b/bin/server.js @@ -0,0 +1,15 @@ +/** + + This file is for development purposes only. + +*/ + +var config = require('../config'), + http = require('http'), + nodecoin = require('../lib/nodecoin'); + +var app = nodecoin.express.app(config); + +http.createServer(app).listen(app.get('port'), function(){ + console.log('NodeCoin server listening on port ' + app.get('port')); +}); diff --git a/config.js b/config.js new file mode 100644 index 000000000..f9e10d003 --- /dev/null +++ b/config.js @@ -0,0 +1,3 @@ +exports.server = { + port : 8081 +}; diff --git a/lib/main.js b/lib/main.js deleted file mode 100644 index 7e132219a..000000000 --- a/lib/main.js +++ /dev/null @@ -1,6 +0,0 @@ - -function emptyArray(){ - return []; -} - -module.exports = emptyArray; \ No newline at end of file diff --git a/lib/nodecoin.js b/lib/nodecoin.js new file mode 100644 index 000000000..de9d1db40 --- /dev/null +++ b/lib/nodecoin.js @@ -0,0 +1,62 @@ +var pks = require('./pks'), + udc = require('./udc'), + express = require('express'), + path = require('path'), + nodecoin = require('../lib/nodecoin'); +// orm = require('orm'); + +module.exports.pks = pks; +module.exports.udc = udc; +module.exports.express = { + + route: function(app){ + + function notImplemented (req, res) { + res.writeHead(501); + res.end(); + } + + app.get( '/pks/lookup', notImplemented); + app.post( '/pks/add', notImplemented); + app.post( '/udc/amendments/submit', notImplemented); + app.get( '/udc/amendments/view/:amendment_id/members', notImplemented); + app.get( '/udc/amendments/view/:amendment_id/self', notImplemented); + app.get( '/udc/amendments/view/:amendment_id/voters', notImplemented); + app.post( '/udc/coins/submit', notImplemented); + app.get( '/udc/coins/view/:coin_id', notImplemented); + app.get( '/udc/peer/list', notImplemented); + app.post( '/udc/peer/register', notImplemented); + app.get( '/udc/peer/self', notImplemented); + app.get( '/udc/transactions/coin/:coin_id', notImplemented); + app.get( '/udc/transactions/recipient/:fingerprint', notImplemented); + app.get( '/udc/transactions/search', notImplemented); + app.get( '/udc/transactions/sender/:fingerprint', notImplemented); + app.post( '/udc/transactions/submit', notImplemented); + app.get( '/udc/transactions/view/:transaction_id', notImplemented); + }, + + app: function (someConfig) { + var app = express(); + var config = someConfig || { + server: { port: 8001 }, + db: "somedb" + }; + + // all environments + app.set('port', process.env.PORT || config.server.port); + app.use(express.logger('dev')); + app.use(express.bodyParser()); + app.use(express.methodOverride()); + app.use(express.cookieParser('your secret here')); + app.use(express.session()); + app.use(app.router); + + // development only + if ('development' == app.get('env')) { + app.use(express.errorHandler()); + } + + this.route(app); + return app; + } +}; \ No newline at end of file diff --git a/lib/pks.js b/lib/pks.js new file mode 100644 index 000000000..1e066b45e --- /dev/null +++ b/lib/pks.js @@ -0,0 +1,8 @@ +module.exports = { + + lookup: function (req, res) { + }, + + add: function (req, res) { + } +}; \ No newline at end of file diff --git a/lib/udc.js b/lib/udc.js new file mode 100644 index 000000000..a09954537 --- /dev/null +++ b/lib/udc.js @@ -0,0 +1 @@ +module.exports = {}; \ No newline at end of file diff --git a/package.json b/package.json index ce077ef46..33bf0d018 100644 --- a/package.json +++ b/package.json @@ -2,7 +2,7 @@ "name": "nodecoin", "version": "0.0.1", "description": "OpenUDC-like implementation using Node.js", - "main": "lib/main.js", + "main": "lib/nodecoin.js", "directories": { "test": "test" }, @@ -24,8 +24,17 @@ "bugs": { "url": "https://github.com/c-geek/nodecoin/issues" }, + "dependencies": { + "express": "", + "commander": "" + }, "devDependencies": { "mocha": "", - "should": "" + "should": "", + "supertest": "" + }, + "private": true, + "bin": { + "nodecoin": "./bin/nodecoin" } } diff --git a/test/main.js b/test/main.js index 0b0eb2f72..e540fb034 100644 --- a/test/main.js +++ b/test/main.js @@ -1,12 +1,157 @@ var should = require('should'); -var emptyArray = require('../lib/main'); - -describe('emptyArray', function () { - describe('with no arguments', function () { - it('returns an empty array', function () { - var result = emptyArray(); - result.should.eql([]); - }); - }); +var request = require('supertest'); +var nodecoin = require('../lib/nodecoin'); + +var app = nodecoin.express.app(); + +//----------- PKS ----------- +describe('Request on /pks/lookup', function(){ + it('GET should respond 501', function(done){ + request(app) + .get('/pks/lookup') + .expect(501, done); + }); + it('POST should respond 404', function(done){ + request(app) + .post('/pks/lookup') + .expect(404, done); + }); +}); + +describe('Request on /pks/add', function(){ + it('POST should respond 501', function(done){ + request(app) + .post('/pks/add') + .expect(501, done); + }); + it('GET should respond 404', function(done){ + request(app) + .get('/pks/add') + .expect(404, done); + }); +}); + +//----------- AMENDMENTS ----------- +describe('Request on /udc/amendments/view/:amendment_id/members', function(){ + it('GET should respond 501', function(done){ + request(app) + .get('/udc/amendments/view/1/members') + .expect(501, done); + }); +}); + +describe('Request on /udc/amendments/view/:amendment_id/voters', function(){ + it('GET should respond 501', function(done){ + request(app) + .get('/udc/amendments/view/1/voters') + .expect(501, done); + }); +}); + +describe('Request on /udc/amendments/view/:amendment_id/self', function(){ + it('GET should respond 501', function(done){ + request(app) + .get('/udc/amendments/view/1/self') + .expect(501, done); + }); +}); + +describe('Request on /udc/amendments/submit', function(){ + it('POST should respond 501', function(done){ + request(app) + .post('/udc/amendments/submit') + .expect(501, done); + }); +}); + +//----------- COINS ----------- +describe('Request on /udc/coins/submit', function(){ + it('POST should respond 501', function(done){ + request(app) + .post('/udc/coins/submit') + .expect(501, done); + }); +}); + +describe('Request on /udc/coins/view/:coin_id', function(){ + it('GET should respond 501', function(done){ + request(app) + .get('/udc/coins/view/2') + .expect(501, done); + }); +}); + +//----------- PEER ----------- +describe('Request on /udc/peer/register', function(){ + it('POST should respond 501', function(done){ + request(app) + .post('/udc/peer/register') + .expect(501, done); + }); +}); + +describe('Request on /udc/peer/list', function(){ + it('GET should respond 501', function(done){ + request(app) + .get('/udc/peer/list') + .expect(501, done); + }); +}); + +describe('Request on /udc/peer/self', function(){ + it('GET should respond 501', function(done){ + request(app) + .get('/udc/peer/self') + .expect(501, done); + }); +}); + +//----------- TRANSACTIONS ----------- +describe('Request on /udc/transactions/submit', function(){ + it('POST should respond 501', function(done){ + request(app) + .post('/udc/transactions/submit') + .expect(501, done); + }); +}); + +describe('Request on /udc/transactions/search', function(){ + it('GET should respond 501', function(done){ + request(app) + .get('/udc/transactions/search') + .expect(501, done); + }); +}); + +describe('Request on /udc/transactions/coin/:coin_id', function(){ + it('GET should respond 501', function(done){ + request(app) + .get('/udc/transactions/coin/2') + .expect(501, done); + }); +}); + +describe('Request on /udc/transactions/recipient/:fingerprint', function(){ + it('GET should respond 501', function(done){ + request(app) + .get('/udc/transactions/recipient/RECIPIENT_FPR') + .expect(501, done); + }); +}); + +describe('Request on /udc/transactions/sender/:fingerprint', function(){ + it('GET should respond 501', function(done){ + request(app) + .get('/udc/transactions/sender/SENDER_FPR') + .expect(501, done); + }); +}); + +describe('Request on /udc/transactions/view/:transaction_id', function(){ + it('GET should respond 501', function(done){ + request(app) + .get('/udc/transactions/view/TX_ID') + .expect(501, done); + }); }); \ No newline at end of file -- GitLab