Просмотр исходного кода

update archiving acceptance tests

Brian Gough 10 лет назад
Родитель
Сommit
5ea7a31ad9

+ 17 - 11
services/track-changes/test/acceptance/coffee/ArchivingUpdatesTests.coffee

@@ -42,15 +42,15 @@ describe "Archiving updates", ->
 		sinon.spy MockDocStoreApi, "getAllDoc"
 
 		@updates = []
-		for i in [0..1024+9]
+		for i in [0..512+10]
 			@updates.push {
 				op: [{ i: "a", p: 0 }]
-				meta: { ts: @now - i * @hours, user_id: @user_id }
+				meta: { ts: @now + (i-2048) * @hours, user_id: @user_id }
 				v: 2 * i + 1
 			}
 			@updates.push {
 				op: [{ i: "b", p: 0 }]
-				meta: { ts: @now - i * @hours + 10*@minutes, user_id: @user_id }
+				meta: { ts: @now + (i-2048) * @hours + 10*@minutes, user_id: @user_id }
 				v: 2 * i + 2
 			}
 
@@ -62,8 +62,9 @@ describe "Archiving updates", ->
 
 	after (done) ->
 		MockWebApi.getUserInfo.restore()
-		db.docHistory.remove {project_id: ObjectId(@project_id)}, () ->
-			TrackChangesClient.removeS3Doc @project_id, @doc_id, done
+		db.docHistory.remove {project_id: ObjectId(@project_id)}, () =>
+			db.docHistoryIndex.remove {project_id: ObjectId(@project_id)}, () =>
+				TrackChangesClient.removeS3Doc @project_id, @doc_id, done
 
 	describe "archiving a doc's updates", ->
 		before (done) ->
@@ -97,14 +98,19 @@ describe "Archiving updates", ->
 		it "should have a docHistoryIndex entry with the last version", (done) ->
 			db.docHistoryIndex.findOne { _id: ObjectId(@doc_id) }, (error, index) ->
 				throw error if error?
-				index.packs[0].v_end.should.equal 100
+				index.packs[0].v_end.should.equal 1024
 				done()
 
-		# it "should store twenty doc changes in S3 in one pack", (done) ->
-		# 	TrackChangesClient.getS3Doc @project_id, @doc_id, (error, res, doc) =>
-		# 		doc.length.should.equal 1
-		# 		doc[0].pack.length.should.equal 20
-		# 		done()
+		it "should store 1024 doc changes in S3 in one pack", (done) ->
+			db.docHistoryIndex.findOne { _id: ObjectId(@doc_id) }, (error, index) =>
+				throw error if error?
+				console.log "index", index, JSON.stringify(index)
+				pack_id = index.packs[0]._id
+				TrackChangesClient.getS3Doc @project_id, @doc_id, pack_id, (error, doc) =>
+					console.log error, "DOC", doc
+					doc.n.should.equal 1024
+					doc.pack.length.should.equal 1024
+					done()
 
 	describe "unarchiving a doc's updates", ->
 		before (done) ->

+ 18 - 5
services/track-changes/test/acceptance/coffee/helpers/TrackChangesClient.coffee

@@ -1,3 +1,5 @@
+async = require 'async'
+zlib = require 'zlib'
 request = require "request"
 rclient = require("redis").createClient() # Only works locally for now
 {db, ObjectId} = require "../../../../app/js/mongojs"
@@ -99,10 +101,21 @@ module.exports = TrackChangesClient =
 				uri:"https://#{Settings.trackchanges.stores.doc_history}.s3.amazonaws.com/#{key}"
 		}
 
-	getS3Doc: (project_id, doc_id, callback = (error, res, body) ->) ->
-		options = TrackChangesClient.buildS3Options(true, project_id+"/changes-"+doc_id)
-		request.get options, callback	
+	getS3Doc: (project_id, doc_id, pack_id, callback = (error, body) ->) ->
+		options = TrackChangesClient.buildS3Options(true, project_id+"/changes-"+doc_id+"/pack-"+pack_id)
+		options.encoding = null
+		request.get options, (err, res, body) ->
+			console.log "body", typeof body
+			return callback(error) if error?
+			zlib.gunzip body, (err, result) ->
+				return callback(err) if err?
+				callback(null, JSON.parse(result.toString()))
 
 	removeS3Doc: (project_id, doc_id, callback = (error, res, body) ->) ->
-		options = TrackChangesClient.buildS3Options(true, project_id+"/changes-"+doc_id)
-		request.del options, callback	
+		options = TrackChangesClient.buildS3Options(true, "?prefix=" + project_id + "/changes-" +doc_id)
+		request.get options, (error, res, body) ->
+			keys = body.match /[0-9a-f]{24}\/changes-[0-9a-f]{24}\/pack-[0-9a-f]{24}/g
+			async.eachSeries keys, (key, cb) ->
+				options = TrackChangesClient.buildS3Options(true, key)
+				request.del options, cb
+			, callback