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

Merge branch 'sk-smarter-percentage-rollout'

Shane Kilkelly 9 лет назад
Родитель
Сommit
e63f452807

+ 11 - 4
services/web/app/coffee/Features/Project/ProjectController.coffee

@@ -24,13 +24,16 @@ AnalyticsManager = require "../Analytics/AnalyticsManager"
 Sources = require "../Authorization/Sources"
 TokenAccessHandler = require '../TokenAccess/TokenAccessHandler'
 CollaboratorsHandler = require '../Collaborators/CollaboratorsHandler'
+crypto = require 'crypto'
 
 module.exports = ProjectController =
 
-	_isInPercentageRollout: (objectId, percentage) ->
+	_isInPercentageRollout: (rolloutName, objectId, percentage) ->
 		if Settings.bypassPercentageRollouts == true
 			return true
-		counter = parseInt(objectId.toString().substring(18, 24), 16)
+		data = "#{rolloutName}:#{objectId.toString()}"
+		md5hash = crypto.createHash('md5').update(data).digest('hex')
+		counter = parseInt(md5hash.slice(26, 32), 16)
 		return (counter % 100) < percentage
 
 	updateProjectSettings: (req, res, next) ->
@@ -274,7 +277,7 @@ module.exports = ProjectController =
 				timestamp = parseInt(user_id.toString().substring(0, 8), 16)
 
 				rolloutPercentage = 60 # Percentage of users to roll out to
-				if !ProjectController._isInPercentageRollout(user_id, rolloutPercentage)
+				if !ProjectController._isInPercentageRollout('autocompile', user_id, rolloutPercentage)
 					# Don't show if user is not part of roll out
 					return cb(null, { enabled: false, showOnboarding: false })
 				userSignupDate = new Date(timestamp * 1000)
@@ -305,7 +308,11 @@ module.exports = ProjectController =
 
 			token = TokenAccessHandler.getRequestToken(req, project_id)
 			isTokenMember = results.isTokenMember
-			enableTokenAccessUI = ProjectController._isInPercentageRollout(project.owner_ref, 0)
+			enableTokenAccessUI = ProjectController._isInPercentageRollout(
+				'linksharing',
+				project.owner_ref,
+				0
+			)
 			AuthorizationManager.getPrivilegeLevelForProject user_id, project_id, token, (error, privilegeLevel)->
 				return next(error) if error?
 				if !privilegeLevel? or privilegeLevel == PrivilegeLevels.NONE

+ 79 - 0
services/web/test/UnitTests/coffee/Project/ProjectControllerTests.coffee

@@ -468,3 +468,82 @@ describe "ProjectController", ->
 				opts.showTrackChangesOnboarding.should.equal false
 				done()
 			@ProjectController.loadEditor @req, @res
+
+	describe '_isInPercentageRollout', ->
+		before ->
+			@ids = [
+				'5a05cd7621f9fe22be131740',
+				'5a05cd7821f9fe22be131741',
+				'5a05cd7921f9fe22be131742',
+				'5a05cd7a21f9fe22be131743',
+				'5a05cd7b21f9fe22be131744',
+				'5a05cd7c21f9fe22be131745',
+				'5a05cd7d21f9fe22be131746',
+				'5a05cd7e21f9fe22be131747',
+				'5a05cd7f21f9fe22be131748',
+				'5a05cd8021f9fe22be131749',
+				'5a05cd8021f9fe22be13174a',
+				'5a05cd8121f9fe22be13174b',
+				'5a05cd8221f9fe22be13174c',
+				'5a05cd8221f9fe22be13174d',
+				'5a05cd8321f9fe22be13174e',
+				'5a05cd8321f9fe22be13174f',
+				'5a05cd8421f9fe22be131750',
+				'5a05cd8421f9fe22be131751',
+				'5a05cd8421f9fe22be131752',
+				'5a05cd8521f9fe22be131753'
+			]
+
+		it 'should produce the expected results', ->
+			expect(
+				@ids.map (i) =>
+					@ProjectController._isInPercentageRollout('abcd', i, 50)
+			).to.deep.equal [
+				false,
+				false,
+				false,
+				false,
+				false,
+				false,
+				true,
+				false,
+				true,
+				true,
+				true,
+				true,
+				true,
+				true,
+				false,
+				false,
+				false,
+				true,
+				false,
+				true
+				]
+			expect(
+				@ids.map (i) =>
+					@ProjectController._isInPercentageRollout('efgh', i, 50)
+			).to.deep.equal [
+				false,
+				false,
+				false,
+				false,
+				true,
+				false,
+				false,
+				true,
+				false,
+				false,
+				true,
+				true,
+				true,
+				false,
+				true,
+				false,
+				true,
+				true,
+				false,
+				false
+			]
+
+