def parse_user_agent(self, user_agent): if self.user_agent: # Already parsed, nothing to do return self.user_agent = user_agent for engine, version in parse_useragent(user_agent): WorkerEngine.from_parsed_ua(self, engine, version)
def parse_user_agent(self, user_agent): if self.user_agent: # Already parsed, nothing to do return self.user_agent = user_agent for engine, version in parse_useragent(user_agent): WorkerEngine(worker=self, engine=engine, version=version).save()
def test_work(self): user_agent = ('Mozilla/5.0 (Macintosh; U; Intel Mac OS X 10.6; ' 'en-US; rv:1.9.2.12) Gecko/20101026 Firefox/3.6.12') worker = Worker() worker.save() ts = TestSuite(name='Zamboni', slug='zamboni', url='http://server/qunit1.html') ts.save() token = Token.create(ts) # No work to fetch. r = self.client.post(reverse('work.query'), dict(worker_id=worker.id, user_agent=user_agent)) eq_(r.status_code, 200) data = json.loads(r.content) eq_(data['desc'], 'No commands from server.') # Simulate Hudson requesting a job: r = self.client.post(reverse('system.start_tests'), data={'browsers': 'firefox', 'token': token, 'name': ts.slug}) eq_(r.status_code, 200) # Do work r = self.client.post(reverse('work.query'), dict(worker_id=worker.id, user_agent=user_agent)) eq_(r.status_code, 200) data = json.loads(r.content) eq_(data['cmd'], 'run_test') eq_(data['args'][0]['url'], ts.url) eq_(data['args'][0]['name'], ts.name) work_queue_id = data['args'][0]['work_queue_id'] queue = WorkQueue.objects.get(pk=work_queue_id) eq_(queue.worker.id, worker.id) eq_(queue.finished, False) eq_(queue.results, None) eq_(queue.results_received, False) eq_(queue.worker.last_heartbeat.timetuple()[0:3], datetime.now().timetuple()[0:3]) eq_(queue.worker.user_agent, user_agent) eq_(sorted([(e.engine, e.version) for e in queue.worker.engines.all()]), sorted(parse_useragent(user_agent))) results = { 'failures': 0, 'total': 1, 'tests': [{'test': 'foo', 'message': '1 equals 2', 'module': 'some module', 'result': True}] } r = self.client.post(reverse('work.submit_results'), dict(work_queue_id=queue.id, results=json.dumps(results))) eq_(r.status_code, 200) data = json.loads(r.content) eq_(data['desc'], 'Test result received') # Refresh from db... queue = WorkQueue.objects.get(pk=queue.id) eq_(queue.finished, True) eq_(queue.results, json.dumps(results)) eq_(queue.results_received, False) # Cannot fetch more work. r = self.client.post(reverse('work.query'), dict(worker_id=worker.id, user_agent=user_agent)) eq_(r.status_code, 200) data = json.loads(r.content) eq_(data['desc'], 'No commands from server.')
def _verify_ua(ua, expectation): eq_(sorted(parse_useragent(ua)), sorted(expectation))
def test_unknown_browser(): parse_useragent('GARBAGE; rv:2.0b10')
def test_unknown_version(): parse_useragent('GARBAGE')
def test_work(self): user_agent = ('Mozilla/5.0 (Macintosh; U; Intel Mac OS X 10.6; ' 'en-US; rv:1.9.2.12) Gecko/20101026 Firefox/3.6.12') worker = Worker() worker.save() ts = self.suite() token = Token.create(ts) # No work to fetch. r = self.client.post(reverse('work.query'), dict(worker_id=worker.id, user_agent=user_agent)) eq_(r.status_code, 200) data = json.loads(r.content) eq_(data['desc'], 'No commands from server.') # Simulate Hudson requesting a job: r = self.client.post(reverse('system.start_tests'), data={'browsers': 'firefox', 'token': token, 'name': ts.slug}) eq_(r.status_code, 200) # Do work r = self.client.post(reverse('work.query'), dict(worker_id=worker.id, user_agent=user_agent)) eq_(r.status_code, 200) data = json.loads(r.content) eq_(data['cmd'], 'run_test') eq_(data['args'][0]['url'], ts.default_url) eq_(data['args'][0]['name'], ts.name) work_queue_id = data['args'][0]['work_queue_id'] queue = WorkQueue.objects.get(pk=work_queue_id) eq_(queue.worker.id, worker.id) eq_(queue.finished, False) eq_(queue.results, None) eq_(queue.results_received, False) eq_(queue.worker.last_heartbeat.timetuple()[0:3], datetime.now().timetuple()[0:3]) eq_(queue.worker.user_agent, user_agent) eq_(sorted([(e.engine, e.version) for e in queue.worker.engines.all()]), sorted(parse_useragent(user_agent))) results = { 'failures': 0, 'total': 1, 'tests': [{'test': 'foo', 'message': '1 equals 2', 'module': 'some module', 'result': True}] } r = self.client.post(reverse('work.submit_results'), dict(work_queue_id=queue.id, results=json.dumps(results))) eq_(r.status_code, 200) data = json.loads(r.content) eq_(data['desc'], 'Test result received') # Refresh from db... queue = WorkQueue.objects.get(pk=queue.id) eq_(queue.finished, True) eq_(queue.results, json.dumps(results)) eq_(queue.results_received, False) # Cannot fetch more work. r = self.client.post(reverse('work.query'), dict(worker_id=worker.id, user_agent=user_agent)) eq_(r.status_code, 200) data = json.loads(r.content) eq_(data['desc'], 'No commands from server.')