From 36ac3817a7f5999422c2d7f050aeb1ecf655ff08 Mon Sep 17 00:00:00 2001 From: dceejay Date: Sun, 10 May 2015 19:27:35 +0100 Subject: [PATCH] Bump test coverage for Exif node. Remove dependancy on actual jpg files. --- test/utility/exif/94-exif_spec.js | 197 ++++++++++++++++++++++++- test/utility/exif/exif_test_image.jpg | Bin 1732 -> 0 bytes test/utility/exif/exif_test_image2.jpg | Bin 285 -> 0 bytes utility/exif/94-exif.js | 13 +- utility/exif/package.json | 2 +- 5 files changed, 196 insertions(+), 16 deletions(-) delete mode 100644 test/utility/exif/exif_test_image.jpg delete mode 100644 test/utility/exif/exif_test_image2.jpg diff --git a/test/utility/exif/94-exif_spec.js b/test/utility/exif/94-exif_spec.js index e910dafe..6b9a75ae 100644 --- a/test/utility/exif/94-exif_spec.js +++ b/test/utility/exif/94-exif_spec.js @@ -16,7 +16,7 @@ var should = require("should"); var sinon = require('sinon'); -var fs = require("fs"); +//var fs = require("fs"); var helper = require('../../../test/helper.js'); var exifNode = require('../../../utility/exif/94-exif.js'); @@ -28,8 +28,9 @@ describe('exif node', function() { }); afterEach(function(done) { - helper.unload(); - helper.stopServer(done); + helper.unload().then(function() { + helper.stopServer(done); + }); }); it('extracts location data from Exif data of JPEG', function(done) { @@ -37,11 +38,25 @@ describe('exif node', function() { var ExifImage = exif.ExifImage; // the jpg file is a single black dot but it was originally a photo taken at IBM Hursley //console.log(process.cwd()); - var data = fs.readFileSync("test/utility/exif/exif_test_image.jpg", null); // extracting genuine exif data to be fed back as the result of the stubbed ExifImage constructor + //var data = fs.readFileSync("test/utility/exif/exif_test_image.jpg", null); // extracting genuine exif data to be fed back as the result of the stubbed ExifImage constructor //var data = fs.readFileSync("exif_test_image.jpg", null); // extracting genuine exif data to be fed back as the result of the stubbed ExifImage constructor var flow = [{id:"exifNode1", type:"exif", wires:[["helperNode1"]]}, {id:"helperNode1", type:"helper"}]; + var gpsmsg = { gps: { GPSLatitudeRef: 'N', + GPSLatitude: [ 50, 57, 22.4697 ], + GPSLongitudeRef: 'W', + GPSLongitude: [ 1, 22, 1.2467 ], + GPSAltitudeRef: 0, + GPSAltitude: 50, + GPSTimeStamp: [ 7, 32, 2 ], + GPSImgDirectionRef: 'M', + GPSImgDirection: 267, + GPSProcessingMethod: 'ASCII\u0000\u0000\u0000FUSED', + GPSDateStamp: '2014:06:10' } + }; + var spy = sinon.stub(exif, 'ExifImage', function(arg1,arg2) { arg2(null,gpsmsg); }); + helper.load(exifNode, flow, function() { var exifNode1 = helper.getNode("exifNode1"); var helperNode1 = helper.getNode("helperNode1"); @@ -49,10 +64,48 @@ describe('exif node', function() { helperNode1.on("input", function(msg) { msg.location.lat.should.equal(50.95624); // this data is stored in the jpg file msg.location.lon.should.equal(-1.36701); + exif.ExifImage.restore(); done(); }); - exifNode1.receive({payload:data}); + exifNode1.receive({payload:new Buffer("hello")}); + }); + }); + + it('extracts location data in Southern and Eastern hemispheres', function(done) { + var exif = require('exif'); + var ExifImage = exif.ExifImage; + // the jpg file is a single black dot but it was originally a photo taken at IBM Hursley + //console.log(process.cwd()); + //var data = fs.readFileSync("test/utility/exif/exif_test_image.jpg", null); // extracting genuine exif data to be fed back as the result of the stubbed ExifImage constructor + //var data = fs.readFileSync("exif_test_image.jpg", null); // extracting genuine exif data to be fed back as the result of the stubbed ExifImage constructor + var flow = [{id:"exifNode1", type:"exif", wires:[["helperNode1"]]}, + {id:"helperNode1", type:"helper"}]; + + var gpsmsg = { gps: { GPSLatitudeRef: 'S', + GPSLatitude: [ 50, 57, 22.4697 ], + GPSLongitudeRef: 'E', + GPSLongitude: [ 1, 22, 1.2467 ], + GPSTimeStamp: [ 7, 32, 2 ], + GPSImgDirectionRef: 'M', + GPSImgDirection: 267, + GPSProcessingMethod: 'ASCII\u0000\u0000\u0000FUSED', + GPSDateStamp: '2014:06:10' } + }; + var spy = sinon.stub(exif, 'ExifImage', function(arg1,arg2) { arg2(null,gpsmsg); }); + + helper.load(exifNode, flow, function() { + var exifNode1 = helper.getNode("exifNode1"); + var helperNode1 = helper.getNode("helperNode1"); + + helperNode1.on("input", function(msg) { + msg.location.lat.should.equal(-50.95624); // this data is stored in the jpg file + msg.location.lon.should.equal(1.36701); + exif.ExifImage.restore(); + done(); + }); + + exifNode1.receive({payload:new Buffer("hello")}); }); }); @@ -61,11 +114,17 @@ describe('exif node', function() { var ExifImage = exif.ExifImage; // the jpg file is a single black dot but it was originally a photo taken at IBM Hursley //console.log(process.cwd()); - var data = fs.readFileSync("test/utility/exif/exif_test_image2.jpg", null); // extracting genuine exif data to be fed back as the result of the stubbed ExifImage constructor + //var data = fs.readFileSync("test/utility/exif/exif_test_image2.jpg", null); // extracting genuine exif data to be fed back as the result of the stubbed ExifImage constructor //var data = fs.readFileSync("exif_test_image2.jpg", null); // extracting genuine exif data to be fed back as the result of the stubbed ExifImage constructor var flow = [{id:"exifNode1", type:"exif", wires:[["helperNode1"]]}, {id:"helperNode1", type:"helper"}]; + var gpsmsg = {}; + var spy = sinon.stub(exif, 'ExifImage', + function(arg1,arg2){ + arg2(null,gpsmsg); + }); + helper.load(exifNode, flow, function() { var exifNode1 = helper.getNode("exifNode1"); var helperNode1 = helper.getNode("helperNode1"); @@ -77,17 +136,18 @@ describe('exif node', function() { logEvents.should.have.length(1); logEvents[0][0].should.have.a.property('msg'); logEvents[0][0].msg.toString().should.startWith("The incoming image did not contain Exif GPS"); + exif.ExifImage.restore(); done(); },150); - exifNode1.receive({payload:data}); + exifNode1.receive({payload:new Buffer("hello")}); }); }); it('should report if not a jpeg', function(done) { var exif = require('exif'); var ExifImage = exif.ExifImage; - // the jpg file is a single black dot but it was originally a photo taken at IBM Hursley + // this time just use a buffer that isn't an jpeg image var data = new Buffer("hello"); var eD; var flow = [{id:"exifNode1", type:"exif", wires:[["helperNode1"]]}, @@ -162,4 +222,125 @@ describe('exif node', function() { exifNode1.receive({topic:data}); }); }); + + it('should report if bad latitude', function(done) { + var exif = require('exif'); + var ExifImage = exif.ExifImage; + var data = new Buffer("hello"); + var eD; + var flow = [{id:"exifNode1", type:"exif", wires:[["helperNode1"]]}, + {id:"helperNode1", type:"helper"}]; + + var gpsmsg = { gps: { GPSLatitudeRef: 'N', + GPSLatitude: [ 50, 57 ], + GPSLongitudeRef: 'W', + GPSLongitude: [ 1, 22, 1.2467 ], + GPSAltitudeRef: 0, + GPSAltitude: 50, + GPSTimeStamp: [ 7, 32, 2 ] } + }; + var spy = sinon.stub(exif, 'ExifImage', + function(arg1,arg2){ + arg2(null,gpsmsg); + }); + + helper.load(exifNode, flow, function() { + var exifNode1 = helper.getNode("exifNode1"); + var helperNode1 = helper.getNode("helperNode1"); + + setTimeout(function() { + var logEvents = helper.log().args.filter(function(evt) { + return evt[0].type == "exif"; + }); + logEvents.should.have.length(1); + logEvents[0][0].should.have.a.property('msg'); + logEvents[0][0].msg.toString().should.startWith("Invalid latitude data,"); + exif.ExifImage.restore(); + done(); + },150); + + exifNode1.receive({payload:data}); + }); + }); + + it('should report if bad longitude', function(done) { + var exif = require('exif'); + var ExifImage = exif.ExifImage; + var data = new Buffer("hello"); + var eD; + var flow = [{id:"exifNode1", type:"exif", wires:[["helperNode1"]]}, + {id:"helperNode1", type:"helper"}]; + + var gpsmsg = { gps: { GPSLatitudeRef: 'N', + GPSLatitude: [ 50, 57, 1.3 ], + GPSLongitudeRef: 'W', + GPSLongitude: [ 1, 22 ], + GPSAltitudeRef: 0, + GPSAltitude: 50, + GPSTimeStamp: [ 7, 32, 2 ] } + }; + var spy = sinon.stub(exif, 'ExifImage', + function(arg1,arg2){ + arg2(null,gpsmsg); + }); + + helper.load(exifNode, flow, function() { + var exifNode1 = helper.getNode("exifNode1"); + var helperNode1 = helper.getNode("helperNode1"); + + setTimeout(function() { + var logEvents = helper.log().args.filter(function(evt) { + return evt[0].type == "exif"; + }); + logEvents.should.have.length(1); + logEvents[0][0].should.have.a.property('msg'); + logEvents[0][0].msg.toString().should.startWith("Invalid longitude data,"); + exif.ExifImage.restore(); + done(); + },150); + + exifNode1.receive({payload:data}); + }); + }); + + it('should report if unsure about location', function(done) { + var exif = require('exif'); + var ExifImage = exif.ExifImage; + var data = new Buffer("hello"); + var eD; + var flow = [{id:"exifNode1", type:"exif", wires:[["helperNode1"]]}, + {id:"helperNode1", type:"helper"}]; + + var gpsmsg = { gps: { GPSLatitudeRef: 'N', + GPSLatitude: [ 50, 57, 1.3 ], + GPSAltitudeRef: 0, + GPSAltitude: 50, + GPSTimeStamp: [ 7, 32, 2 ] } + }; + var spy = sinon.stub(exif, 'ExifImage', + function(arg1,arg2){ + arg2(null,gpsmsg); + }); + + helper.load(exifNode, flow, function() { + var exifNode1 = helper.getNode("exifNode1"); + var helperNode1 = helper.getNode("helperNode1"); + + setTimeout(function() { + var logEvents = helper.log().args.filter(function(evt) { + return evt[0].type == "exif"; + }); + logEvents.should.have.length(1); + logEvents[0][0].should.have.a.property('msg'); + logEvents[0][0].msg.toString().should.startWith("The location of this image cannot be determined safely"); + exif.ExifImage.restore(); + done(); + },150); + + exifNode1.receive({payload:data}); + }); + }); + + + }); diff --git a/test/utility/exif/exif_test_image.jpg b/test/utility/exif/exif_test_image.jpg deleted file mode 100644 index 4ce96b3c4917c1e799f251cdfffc831b5047770f..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1732 zcmd5-SxggA6uocWOk0W(MivoctO$aBO$#FQ#{d>65h9?1ehC%?6OEuC8a1JAl|)nO zh9o4#1<@~2ar-bXxbb1)4j2=0MZa)gVlv)0GaW$uF#6+bUf!8I=bgFd-FH*DM}7*S zIhoE(AcR0R{y^>*+8lM2!v|Ie>&J*o4n3Ni+z!5}dVUqK-F_ z1fWVBcX44FM%MO9;5Gg>Ph0?#+sNw9E32znZJCL$Sr&?>x{B`RfHEm|x9E6@Ctg!_ z0eAt7xQmx;Hpxqs48u{R!prM;LnBc+grndiU{=3Eygp9XZ1VAX-0ut0^pWT@>zsCf z;9FKn@{=KVelFk$h@TF_LI9H!D8&Yz1>b_}AWoM}vL@N3WV=|oOVC^lJ#~xMBSS79)9kA+hMJ&!M zK3RMfB34;8*;lkma~{-Xm~p(I-Ucq0aYUWd4igp4vB)_AlN20`_#&g>u;FC7sme-M zoJVh=T8zabRV&n%l78@gOs64!jSU#AM{1`Go{?~yb2BZ zOjWq8zOmIbHNE3ImcaS-9eAI;KxM}eT(`O{jOrDjJYR{PC$jr)i<`m9f zu&}6j(c-19vhrmWmCIMJsi|FCw{HFBEnBy3_v~o!?cTF@-~Ofp%?A%1KGJry{n+u7 zr%rdCIeYH>g)3LPu3f)z^H%rWd-oqaeALt1*Z=JKi$q?DnGweqA{w_eC{~gB@Gj z+j$B3Q5C90>%