From 3cdd1eb30fab42670a1dc9e90a4544a3c637e28d Mon Sep 17 00:00:00 2001 From: Jenny Pollack Date: Mon, 2 Nov 2015 16:12:43 -0800 Subject: [PATCH 1/5] add tcp_server.js file --- jenny_pollack/tcp_server.js | 0 1 file changed, 0 insertions(+), 0 deletions(-) create mode 100644 jenny_pollack/tcp_server.js diff --git a/jenny_pollack/tcp_server.js b/jenny_pollack/tcp_server.js new file mode 100644 index 0000000..e69de29 From 388eb1ba86bc235b6b64bac3f9b8595c9de13016 Mon Sep 17 00:00:00 2001 From: Jenny Pollack Date: Tue, 3 Nov 2015 09:48:30 -0800 Subject: [PATCH 2/5] more structure and gitignore --- jenny_pollack/.gitignore | 1 + jenny_pollack/gulpfile.js | 0 jenny_pollack/package.json | 24 ++++++++++++++++++++++++ 3 files changed, 25 insertions(+) create mode 100644 jenny_pollack/.gitignore create mode 100644 jenny_pollack/gulpfile.js create mode 100644 jenny_pollack/package.json diff --git a/jenny_pollack/.gitignore b/jenny_pollack/.gitignore new file mode 100644 index 0000000..b512c09 --- /dev/null +++ b/jenny_pollack/.gitignore @@ -0,0 +1 @@ +node_modules \ No newline at end of file diff --git a/jenny_pollack/gulpfile.js b/jenny_pollack/gulpfile.js new file mode 100644 index 0000000..e69de29 diff --git a/jenny_pollack/package.json b/jenny_pollack/package.json new file mode 100644 index 0000000..daf87b7 --- /dev/null +++ b/jenny_pollack/package.json @@ -0,0 +1,24 @@ +{ + "name": "create_a_tcp_server", + "version": "0.1.0", + "description": "simple tcp server", + "main": "index.js", + "scripts": { + "test": "echo \"Error: no test specified\" && exit 1" + }, + "repository": { + "type": "git", + "url": "git+https://github.com/jennypollack/create_a_tcp_server.git" + }, + "author": "Jenny Pollack", + "license": "MIT", + "bugs": { + "url": "https://github.com/jennypollack/create_a_tcp_server/issues" + }, + "homepage": "https://github.com/jennypollack/create_a_tcp_server#readme", + "devDependencies": { + "chai": "^3.4.0", + "jshint": "^2.8.0", + "mocha": "^2.3.3" + } +} From 95ab584b6087a3cde77f1eb2b2f340e64c065a8e Mon Sep 17 00:00:00 2001 From: Jenny Pollack Date: Tue, 3 Nov 2015 12:26:58 -0800 Subject: [PATCH 3/5] tests not working. can't close server as expected --- jenny_pollack/gulpfile.js | 49 +++++++++++++++++++++++++++++++++ jenny_pollack/index.js | 1 + jenny_pollack/lib/tcp_server.js | 46 +++++++++++++++++++++++++++++++ jenny_pollack/package.json | 2 ++ jenny_pollack/tcp_server.js | 0 jenny_pollack/test/tcp_test.js | 16 +++++++++++ 6 files changed, 114 insertions(+) create mode 100644 jenny_pollack/index.js create mode 100644 jenny_pollack/lib/tcp_server.js delete mode 100644 jenny_pollack/tcp_server.js create mode 100644 jenny_pollack/test/tcp_test.js diff --git a/jenny_pollack/gulpfile.js b/jenny_pollack/gulpfile.js index e69de29..fc11fd9 100644 --- a/jenny_pollack/gulpfile.js +++ b/jenny_pollack/gulpfile.js @@ -0,0 +1,49 @@ +var gulp = require('gulp'); +var jshint = require('gulp-jshint'); +var mocha = require('gulp-mocha'); +var appFiles = ['index.js', 'lib/**/*.js', 'bin/**/*.js']; +var testFiles = ['test/**/*.js']; + +gulp.task('jshint:test', function() { + return gulp.src(testFiles) + .pipe(jshint({ + node: true, + globals: { + describe: true, + it: true, + before: true, + after: true + } + })) + .pipe(jshint.reporter('default')); +}); + +gulp.task('jshint:app', function() { + return gulp.src(appFiles) + .pipe(jshint({ + node: true, + globals: { + describe: true, + it: true, + before: true, + after: true + } + })) + .pipe(jshint.reporter('default')); +}); + +gulp.task('mocha', function(){ + return gulp.src(testFiles) + .pipe(jshint({ + node: true, + globals: { + describe: true, + it: true + } + })) + .pipe(mocha({reporter: 'spec'})); +}); + + +gulp.task('jshint', ['jshint:test', 'jshint:app']); +gulp.task('default', ['jshint', 'mocha']); \ No newline at end of file diff --git a/jenny_pollack/index.js b/jenny_pollack/index.js new file mode 100644 index 0000000..7c540fb --- /dev/null +++ b/jenny_pollack/index.js @@ -0,0 +1 @@ +var tcp = require(__dirname + '/lib/tcp_server'); diff --git a/jenny_pollack/lib/tcp_server.js b/jenny_pollack/lib/tcp_server.js new file mode 100644 index 0000000..58634fe --- /dev/null +++ b/jenny_pollack/lib/tcp_server.js @@ -0,0 +1,46 @@ +var net = require('net'); +var fs = require('fs'); + +var server = module.exports = net.createServer(function(socket){ + + var unixTimestamp = Date.now(); + var file = fs.createWriteStream(unixTimestamp + '.txt'); + socket.pipe(file); + + socket.on('end', function(){ + console.log('connection ending'); + }); + +}); + +server.listen('3000', function(){ + console.log('server running'); +}); + +//use this format to pipe the socket +//to the file +//everything on unix is a file +//including the console +//so stdout is a file descriptor +//we can write to it in the exact +//same way we write to a file + +//fs.createWriteStream(path, [options]) +//the path should be afolder in your +//local directory +//timestamps is a good idea +//global unique identifier +//crypto.random to generate a random text string +// +// +//close the connection after you've +//logged the data + +//Write a simple tcp logging server. +//This server should receive tcp requests +//and save the request into a file. Each +//request should be saved into it's own file +//and you'll have to find something unique +//to name them. You can use a UUID library +//or the current time or any other means of +//having unique strings that you can think of. \ No newline at end of file diff --git a/jenny_pollack/package.json b/jenny_pollack/package.json index daf87b7..78c528a 100644 --- a/jenny_pollack/package.json +++ b/jenny_pollack/package.json @@ -18,6 +18,8 @@ "homepage": "https://github.com/jennypollack/create_a_tcp_server#readme", "devDependencies": { "chai": "^3.4.0", + "gulp-jshint": "^1.12.0", + "gulp-mocha": "^2.1.3", "jshint": "^2.8.0", "mocha": "^2.3.3" } diff --git a/jenny_pollack/tcp_server.js b/jenny_pollack/tcp_server.js deleted file mode 100644 index e69de29..0000000 diff --git a/jenny_pollack/test/tcp_test.js b/jenny_pollack/test/tcp_test.js new file mode 100644 index 0000000..870904d --- /dev/null +++ b/jenny_pollack/test/tcp_test.js @@ -0,0 +1,16 @@ +var expect = require('chai').expect; +var fs = require('fs'); +var tcp = require(__dirname + '/../lib/tcp_server'); + + +describe('test for server starting', function(){ + it('should do something', function(){ + + }); +}); + +describe('a net server request', function() { + it('should ...', function() { + + }); +}); \ No newline at end of file From 605596d45fb5b27536e93ab93230a422988b7902 Mon Sep 17 00:00:00 2001 From: Jenny Pollack Date: Tue, 3 Nov 2015 12:50:31 -0800 Subject: [PATCH 4/5] add server.close --- jenny_pollack/lib/tcp_server.js | 1 + 1 file changed, 1 insertion(+) diff --git a/jenny_pollack/lib/tcp_server.js b/jenny_pollack/lib/tcp_server.js index 58634fe..0cd98eb 100644 --- a/jenny_pollack/lib/tcp_server.js +++ b/jenny_pollack/lib/tcp_server.js @@ -9,6 +9,7 @@ var server = module.exports = net.createServer(function(socket){ socket.on('end', function(){ console.log('connection ending'); + server.close(); }); }); From 0905bcdc88744e40b5d8d503ebb919cc25380fe0 Mon Sep 17 00:00:00 2001 From: Jenny Pollack Date: Tue, 24 Nov 2015 12:59:24 -0800 Subject: [PATCH 5/5] add working tests --- jenny_pollack/.gitignore | 3 ++- jenny_pollack/lib/tcp_server.js | 2 +- jenny_pollack/package.json | 5 +++-- jenny_pollack/test/tcp_test.js | 33 ++++++++++++++++++++++++--------- 4 files changed, 30 insertions(+), 13 deletions(-) diff --git a/jenny_pollack/.gitignore b/jenny_pollack/.gitignore index b512c09..4363a92 100644 --- a/jenny_pollack/.gitignore +++ b/jenny_pollack/.gitignore @@ -1 +1,2 @@ -node_modules \ No newline at end of file +node_modules +logs \ No newline at end of file diff --git a/jenny_pollack/lib/tcp_server.js b/jenny_pollack/lib/tcp_server.js index 0cd98eb..04926d4 100644 --- a/jenny_pollack/lib/tcp_server.js +++ b/jenny_pollack/lib/tcp_server.js @@ -4,7 +4,7 @@ var fs = require('fs'); var server = module.exports = net.createServer(function(socket){ var unixTimestamp = Date.now(); - var file = fs.createWriteStream(unixTimestamp + '.txt'); + var file = fs.createWriteStream(__dirname + '/../logs/' + unixTimestamp + '.txt'); socket.pipe(file); socket.on('end', function(){ diff --git a/jenny_pollack/package.json b/jenny_pollack/package.json index 78c528a..5cb645b 100644 --- a/jenny_pollack/package.json +++ b/jenny_pollack/package.json @@ -4,7 +4,7 @@ "description": "simple tcp server", "main": "index.js", "scripts": { - "test": "echo \"Error: no test specified\" && exit 1" + "test": "./node_modules/mocha/bin/mocha test" }, "repository": { "type": "git", @@ -21,6 +21,7 @@ "gulp-jshint": "^1.12.0", "gulp-mocha": "^2.1.3", "jshint": "^2.8.0", - "mocha": "^2.3.3" + "mocha": "^2.3.3", + "superagent": "^1.4.0" } } diff --git a/jenny_pollack/test/tcp_test.js b/jenny_pollack/test/tcp_test.js index 870904d..c9ad136 100644 --- a/jenny_pollack/test/tcp_test.js +++ b/jenny_pollack/test/tcp_test.js @@ -1,16 +1,31 @@ var expect = require('chai').expect; var fs = require('fs'); var tcp = require(__dirname + '/../lib/tcp_server'); +var request = require('superagent'); +var net = require('net'); +var requestsFilesBefore; +var requestsFilesAfter; -describe('test for server starting', function(){ - it('should do something', function(){ - - }); -}); +describe('a request to the tcp server', function() { -describe('a net server request', function() { - it('should ...', function() { - + before(function(done) { + requestsFilesBefore = fs.readdirSync(__dirname + '/../logs/').length; + var client = net.createConnection({port: 3000}); + client.on('connect', function() { + client.write('test', function(){ + client.end(); + }); + }); + client.on('end', function() { + done(); + }); }); -}); \ No newline at end of file + + it('should have written the file after the request', function() { + requestsFilesAfter = fs.readdirSync(__dirname + '/../logs/').length; + expect(requestsFilesBefore).to.eql(requestsFilesAfter - 1); + }); +}); + +