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

v1 of the redis driver wrapper

Henry Oswald 12 лет назад
Сommit
629241611b

+ 11 - 0
libraries/redis-wrapper/.gitignore

@@ -0,0 +1,11 @@
+**.swp
+
+app.js
+app/js/
+test/unit/js/
+public/build/
+
+node_modules/
+
+/public/js/chat.js
+plato/

+ 35 - 0
libraries/redis-wrapper/Gruntfile.coffee

@@ -0,0 +1,35 @@
+module.exports = (grunt) ->
+
+	# Project configuration.
+	grunt.initConfig
+		coffee:
+			server: 
+				expand: true,
+				flatten: false,
+				cwd: 'app/coffee',
+				src: ['**/*.coffee'],
+				dest: 'app/js/',
+				ext: '.js'
+
+			server_tests:
+				expand: true,
+				flatten: false,
+				cwd: 'test/unit/coffee',
+				src: ['**/*.coffee'],
+				dest: 'test/unit/js/',
+				ext: '.js'
+	
+		mochaTest:
+			unit:
+				options:
+					reporter: process.env.MOCHA_RUNNER || "spec"
+					grep: grunt.option("grep")
+					require: 'coffee-script/register'
+				src: ['test.coffee']
+
+
+	grunt.loadNpmTasks 'grunt-contrib-coffee'
+	grunt.loadNpmTasks 'grunt-mocha-test'
+
+	grunt.registerTask 'test:unit', ['mochaTest:unit']
+

+ 10 - 0
libraries/redis-wrapper/index.coffee

@@ -0,0 +1,10 @@
+module.exports =
+
+	createClient: ()->
+		if arguments[0] instanceof Array
+			client = require("redis-sentinel").createClient.apply null, arguments
+		else
+			client = require("redis").createClient.apply null, arguments
+		return client
+
+

+ 23 - 0
libraries/redis-wrapper/package.json

@@ -0,0 +1,23 @@
+{
+  "name": "redis-sharelatex",
+  "version": "0.0.0",
+  "description": "",
+  "main": "index.coffee",
+  "scripts": {
+    "test": "echo \"Error: no test specified\" && exit 1"
+  },
+  "author": "",
+  "license": "ISC",
+  "dependencies": {
+    "chai": "^1.9.1",
+    "coffee-script": "^1.8.0",
+    "grunt": "^0.4.5",
+    "grunt-contrib-coffee": "^0.11.1",
+    "grunt-mocha-test": "^0.12.0",
+    "mocha": "^1.21.4",
+    "redis": "^0.12.1",
+    "redis-sentinel": "^0.1.1",
+    "sandboxed-module": "^1.0.1",
+    "sinon": "^1.10.3"
+  }
+}

+ 65 - 0
libraries/redis-wrapper/test.coffee

@@ -0,0 +1,65 @@
+should = require('chai').should()
+SandboxedModule = require('sandboxed-module')
+assert = require('assert')
+path = require('path')
+sinon = require('sinon')
+modulePath = path.join __dirname, "./index.coffee"
+expect = require("chai").expect
+
+describe "index", ->
+
+	beforeEach ->
+
+		@settings = {}
+		@sentinelClient = set:->
+		@normalRedisClient = get: ->
+
+		@sentinel =
+			createClient: sinon.stub().returns(@sentinelClient)
+		@normalRedis = 
+			createClient: sinon.stub().returns(@normalRedisClient)
+		@redis = SandboxedModule.require modulePath, requires:
+			"redis-sentinel":@sentinel
+			"redis":@normalRedis
+		@standardOpts =
+			auth_pass: "my password"
+
+	describe "sentinel", ->
+
+		beforeEach ->
+			@endpoints = [
+				{host: '127.0.0.1', port: 26379},
+				{host: '127.0.0.1', port: 26380}
+			]
+			@masterName = "my master"
+
+		it "should use sentinal if the first argument in an array", ->
+
+			client = @redis.createClient @endpoints, @masterName, @standardOpts
+			@sentinel.createClient.called.should.equal true
+			@normalRedis.createClient.called.should.equal false
+			client.should.equal @sentinelClient
+
+		it "should pass the options correctly though", ->
+			client = @redis.createClient @endpoints, @masterName, @standardOpts
+			@sentinel.createClient.calledWith(@endpoints, @masterName, @standardOpts).should.equal true
+			client.should.equal @sentinelClient
+
+	describe "normal redis", ->
+
+		beforeEach ->
+			@port = 1234
+			@host = "redis.mysite.env"
+
+		it "should use the normal redis driver if a non array is passed", ->
+
+			client = @redis.createClient @port, @host, @standardOpts
+			@sentinel.createClient.called.should.equal false
+			@normalRedis.createClient.called.should.equal true
+			client.should.equal @normalRedisClient
+
+
+		it "should use the normal redis driver if a non array is passed", ->
+
+			client = @redis.createClient @port, @host, @standardOpts
+			@normalRedis.createClient.calledWith(@port, @host, @standardOpts).should.equal true