Skip to content

Commit

Permalink
fix some issues:
Browse files Browse the repository at this point in the history
- latest version of karma needed some adaptation
- sse directly use mq api, in order to avoid filtering
- fix memoize only take the first argument in account
- fix mqservice to allow event name to be tuple or paths

Signed-off-by: Pierre Tardy <pierre.tardy@intel.com>
  • Loading branch information
Pierre Tardy committed Dec 29, 2013
1 parent 72dc286 commit 777c49a
Show file tree
Hide file tree
Showing 7 changed files with 33 additions and 38 deletions.
32 changes: 6 additions & 26 deletions master/buildbot/test/unit/test_www_sse.py
Expand Up @@ -26,14 +26,14 @@ def setUp(self):
self.master = master = self.make_master(url='h:/a/b/')
self.sse = sse.EventResource(master)

def test_oldapi(self):
self.render_resource(self.sse, '/change')
def test_simpleapi(self):
self.render_resource(self.sse, '/change/*/*')
self.readUUID(self.request)
self.assertReceivesChangeNewMessage(self.request)
self.assertEqual(self.request.finished, False)

def test_listen(self):
self.render_resource(self.sse, '/listen/change')
self.render_resource(self.sse, '/listen/change/*/*')
self.readUUID(self.request)
self.assertReceivesChangeNewMessage(self.request)
self.assertEqual(self.request.finished, False)
Expand All @@ -43,7 +43,7 @@ def test_listen_add_then_close(self):
request = self.request
self.request = None
uuid = self.readUUID(request)
self.render_resource(self.sse, '/add/' + uuid + "/change")
self.render_resource(self.sse, '/add/' + uuid + "/change/*/*")
self.assertReceivesChangeNewMessage(request)
self.assertEqual(self.request.finished, True)
self.assertEqual(request.finished, False)
Expand All @@ -54,10 +54,10 @@ def test_listen_add_then_remove(self):
self.render_resource(self.sse, '/listen')
request = self.request
uuid = self.readUUID(request)
self.render_resource(self.sse, '/add/' + uuid + "/change")
self.render_resource(self.sse, '/add/' + uuid + "/change/*/*")
self.assertReceivesChangeNewMessage(request)
self.assertEqual(request.finished, False)
self.render_resource(self.sse, '/remove/' + uuid + "/change")
self.render_resource(self.sse, '/remove/' + uuid + "/change/*/*")
self.assertRaises(AssertionError, self.assertReceivesChangeNewMessage, request)

def test_listen_add_nouuid(self):
Expand All @@ -78,26 +78,6 @@ def test_listen_add_baduuid(self):
self.assertEqual(self.request.responseCode, 400)
self.assertIn("unknown uuid", self.request.written)

def test_listen_add_badevent(self):
self.render_resource(self.sse, '/listen')
request = self.request
uuid = self.readUUID(request)
self.render_resource(self.sse, '/add/' + uuid + '/foo')
self.assertEqual(self.request.finished, True)
self.assertEqual(self.request.responseCode, 404)
self.assertIn("not implemented", self.request.written)

def test_listen_add_then_remove_bad_event(self):
self.render_resource(self.sse, '/listen')
request = self.request
uuid = self.readUUID(request)
self.render_resource(self.sse, '/add/' + uuid + "/change")
self.assertReceivesChangeNewMessage(request)
self.assertEqual(request.finished, False)
self.render_resource(self.sse, '/remove/' + uuid + "/foo")
self.assertEqual(self.request.responseCode, 404)
self.assertIn("consumer is not listening to this event", self.request.written)

def readEvent(self, request):
kw = {}
hasEmptyLine = False
Expand Down
4 changes: 2 additions & 2 deletions master/buildbot/www/sse.py
Expand Up @@ -99,9 +99,9 @@ def render(self, request):
options[k] = options[k][1]

try:
qref = self.master.data.startConsuming(
qref = self.master.mq.startConsuming(
consumer.onMessage,
options, tuple(path))
tuple(path))
consumer.registerQref(pathref, qref)
except NotImplementedError:
return self.finish(request, 404, "not implemented")
Expand Down
12 changes: 7 additions & 5 deletions www/Gruntfile.coffee
Expand Up @@ -369,16 +369,19 @@ module.exports = (grunt) ->
reporters: ['progress']
frameworks: ['jasmine', 'requirejs'],
browsers: ['PhantomJS']
preprocessors:
'**/*.coffee': ['coffee']
,
files: [
"./#{project_name}/scripts/test/main.js"
"#{project_name}/scripts/test/main.js",
{pattern: "#{project_name}/scripts/**/*.js", included: false},
{pattern: "#{project_name}/scripts/**/*.js.map", included: false},
]
dev:
options: # choose from Chrome,Firefox,PhantomJS
browsers: (grunt.option('browsers') or 'PhantomJS').split(",")
background: true
singleRun: false
# background: true
# singleRun: false
ci:
options:
singleRun: true
Expand Down Expand Up @@ -409,7 +412,7 @@ module.exports = (grunt) ->
'copy:js'
'copy:scripts'
'copy:src'
'karma:dev:run'
'karma:dev'
'coffeelint:scripts'
]
options:
Expand Down Expand Up @@ -496,7 +499,6 @@ module.exports = (grunt) ->
# grunt dev
grunt.registerTask 'dev', [
'default'
'karma:dev:start'
'watch',
]

Expand Down
5 changes: 5 additions & 0 deletions www/setup.py
Expand Up @@ -91,6 +91,11 @@ def check_output(cmd):
"grunt-karma": "~0.7.2",
"karma": "~0.11.0",
"karma-jasmine": "~0.1.5",
"karma-requirejs": "~0.2.1",
"karma-coffee-preprocessor": "*",
"karma-chrome-launcher": "*",
"karma-firefox-launcher": "*",
"karma-phantomjs-launcher": "*",
"bower": "~1.2.7"
},
"engines": {
Expand Down
12 changes: 7 additions & 5 deletions www/src/scripts/services/buildbotService.coffee
Expand Up @@ -14,14 +14,17 @@ angular.module('app').factory 'buildbotService',
config.unbind_delay ?= 10 * 60 * 1000 # 10 min by default
# some is added to base service, and restangularized elements
addSomeAndMemoize = (elem) ->
memoize = (f) ->
return _.memoize f, (a,b,c) ->
return [a,b,c].toString()
# all will be memoized later, so we need to save the unmemoized version
elem.unmemoized_all = elem.all
elem.some = _.memoize (route, queryParams) ->
elem.some = memoize (route, queryParams) ->
new_elem = elem.unmemoized_all(route)
new_elem.queryParams = queryParams
return new_elem
elem.one = _.memoize(elem.one)
elem.all = _.memoize(elem.all)
elem.one = memoize(elem.one)
elem.all = memoize(elem.all)

responseExtractor = (response, operation) ->
if operation == "post"
Expand Down Expand Up @@ -88,8 +91,7 @@ angular.module('app').factory 'buildbotService',

p = elem.getList(elem.queryParams).then (res) ->
elem.value = res
events.push(elem.on("*/new", onNewOrChange))
events.push(elem.on("*/update", onNewOrChange))
events.push(elem.on("*/*", onNewOrChange))
return res
else
onUpdate = (msg) ->
Expand Down
4 changes: 4 additions & 0 deletions www/src/scripts/services/mqservice.coffee
Expand Up @@ -31,12 +31,16 @@ angular.module('app').factory 'mqService', ['$http', '$rootScope', ($http, $root

broadcast: (eventname, message) ->
hasmatched = false
if _.isArray(eventname)
eventname = eventname.join("/")
for k, namedListeners of listeners
if match(k, eventname)
for callback in namedListeners
callback(message, eventname)
hasmatched = true
if !hasmatched
for k, namedListeners of listeners
console.log k, eventname
throw Error("broadcasting #{eventname} without listeners!")

# this is intended to be mocked in unittests
Expand Down
2 changes: 2 additions & 0 deletions www/test/scripts/services/buildbotServiceSpec.coffee
Expand Up @@ -131,7 +131,9 @@ if window.__karma__?
expect(r).toBe(r2)
r = buildbotService.one("build",1)
r2 = buildbotService.one("build",1)
r3 = buildbotService.one("build",2)
expect(r).toBe(r2)
expect(r).not.toBe(r3)
r = buildbotService.one("builder",1).all("build")
r2 = buildbotService.one("builder",1).all("build")
expect(r).toBe(r2)
Expand Down

0 comments on commit 777c49a

Please sign in to comment.