Example #1
0
 def test_status_page_ignores_partial_worker(self):
     # Be sure a worker that has not fully started up
     # isn't on status page
     w = Worker()
     w.last_heartbeat = None
     w.is_alive = True
     w.save()
     r = self.client.get(reverse('system.status'))
     eq_(r.status_code, 200)
     eq_(list(r.context['workers']), [])
Example #2
0
def work(request):
    collect_garbage()
    worker = Worker()
    ip = request.META.get('REMOTE_ADDR')
    if ip:
        log.info('Worker started at %s' % ip)
        ip = ip[0:200]
        worker.ip_address = ip
    worker.save()
    return jingo.render(request, 'work/work.html', {'worker_id': worker.id})
Example #3
0
 def test_user_string_truncation(self):
     user_agent = ('Mozilla/5.0 (Macintosh; Intel Mac OS X 10_6_8) '
                   'AppleWebKit/535.1 (KHTML, like Gecko) '
                   'Chrome/13.0.782.215 Safari/535.1')
     worker = Worker()
     worker.save()
     ts = self.suite()
     token = Token.create(ts)
     # This was raising a MySQL error
     r = self.client.post(reverse('work.query'),
                          dict(worker_id=worker.id, user_agent=user_agent))
     eq_(r.status_code, 200)
Example #4
0
 def test_restart_workers(self):
     worker = Worker(user_agent='Mozilla/5.0 (Macintosh; U; etc...')
     worker.save()
     r = self.client.get(reverse('system.restart_workers'))
     eq_(r.status_code, 200)
     data = json.loads(r.content)
     eq_(data['workers_restarted'], 1)
     r = self.client.post(reverse('work.query'),
                          dict(worker_id=worker.id,
                               user_agent=worker.user_agent))
     eq_(r.status_code, 200)
     data = json.loads(r.content)
     eq_(data['cmd'], 'restart')
     eq_(data['args'], [])
     eq_(data['desc'], 'Server said restart. Goodbye!')
Example #5
0
 def test_restart_workers(self):
     worker = Worker(user_agent='Mozilla/5.0 (Macintosh; U; etc...')
     worker.save()
     r = self.client.get(reverse('system.restart_workers'))
     eq_(r.status_code, 200)
     data = json.loads(r.content)
     eq_(data['workers_restarted'], 1)
     r = self.client.post(
         reverse('work.query'),
         dict(worker_id=worker.id, user_agent=worker.user_agent))
     eq_(r.status_code, 200)
     data = json.loads(r.content)
     eq_(data['cmd'], 'restart')
     eq_(data['args'], [])
     eq_(data['desc'], 'Server said restart. Goodbye!')
Example #6
0
 def test_start_tests_with_partial_worker(self):
     ts = create_ts()
     token = Token.create(ts)
     # Be sure a worker that has not fully started up doesn't get
     # chosen for work:
     w = Worker()
     w.last_heartbeat = None
     w.is_alive = True
     w.save()
     r = self.client.post(reverse('system.start_tests'),
                          data={'browsers': '*', 'token': token,
                                'name': ts.slug})
     eq_(r.status_code, 500)
     data = json.loads(r.content)
     eq_(data['error'], True)
     eq_(data['message'], "No workers for u'*' are connected")
Example #7
0
def create_worker(user_agent=None):
    if not user_agent:
        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()
    worker.parse_user_agent(user_agent)
    worker.save()
    return worker
Example #8
0
def count_work(request):
	phone = request.POST.get('phone', None)
	worker_name = request.POST.get('worker_name', None)
	productID = request.POST.get('productID', None)
	product_name = request.POST.get('product_name', None)
	pipline_step = request.POST.get('pipline_step', None)
	count = request.POST.get('count', None)
	notes = request.POST.get('notes', None)
	worker_name=User.objects.filter(phone=phone)[0].nick_name
	product_name=Process.objects.filter(productID=productID)[0].product_name

	r=Tracking.objects.filter(productID=productID)
	if r:
		step=r[0].pipline_step
		print step,pipline_step
		processNum = Process.objects.filter(productID=productID)[0].amount
		if(int(step)==0 and int(pipline_step)!=1):
			return comutils.baseresponse('必须从第一步材料到货开始', 500)
		elif((int(pipline_step)==int(step)+1) or int(step)==0):
			if(int(step)==0):
				if(int(count)<int(processNum)):
					return comutils.baseresponse('必须大于施工单上的数目', 500)
			else:
				num = Worker.objects.filter(productID=productID,pipline_step=(int(pipline_step)-1))[0].count
				if((int(count)>int(num)) and (num!=0)):
					return comutils.baseresponse('数目超过可完成总数目', 500)
				elif(int(count)<int(processNum)):
					return comutils.baseresponse('必须大于施工单上的数目', 500)
			Process.objects.filter(productID=productID).update(count_work=pipline_step)
			Tracking.objects.filter(productID=productID).update(pipline_step=pipline_step)
			if(int(pipline_step)<7):
				Tracking.objects.filter(productID=productID).update(state=1)
			else:
				Process.objects.filter(productID=productID).update(finished=2)
				Tracking.objects.filter(productID=productID).update(state=2)
			try:
				p = Worker(productID=productID,workerID=phone,worker_name=worker_name,product_name=product_name,pipline_step=pipline_step,count=count,notes=notes)
				p.save()
			except Exception, e:
				return comutils.baseresponse('写入员工计件表失败', 500)
			return HttpResponse(json.dumps(1))
		else:
			return comutils.baseresponse('没有按流水顺序执行', 500)
Example #9
0
def create_worker(user_agent=None):
    if not user_agent:
        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()
    worker.parse_user_agent(user_agent)
    worker.save()
    return worker
Example #10
0
 def test_status_page_ignores_partial_worker(self):
     # Be sure a worker that has not fully started up
     # isn't on status page
     w = Worker()
     w.last_heartbeat = None
     w.is_alive = True
     w.save()
     r = self.client.get(reverse('system.status'))
     eq_(r.status_code, 200)
     eq_(list(r.context['workers']), [])
Example #11
0
 def test_start_tests_with_partial_worker(self):
     ts = create_ts()
     token = Token.create(ts)
     # Be sure a worker that has not fully started up doesn't get
     # chosen for work:
     w = Worker()
     w.last_heartbeat = None
     w.is_alive = True
     w.save()
     r = self.client.post(reverse('system.start_tests'),
                          data={
                              'browsers': '*',
                              'token': token,
                              'name': ts.slug
                          })
     eq_(r.status_code, 500)
     data = json.loads(r.content)
     eq_(data['error'], True)
     eq_(data['message'], "No workers for u'*' are connected")
Example #12
0
    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.')
Example #13
0
    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.')
Example #14
0
def work(request):
    collect_garbage()
    worker = Worker()
    worker.save()
    return jingo.render(request, 'work/work.html', {'worker_id': worker.id})
Example #15
0
def work(request):
    collect_garbage()
    worker = Worker()
    worker.save()
    return jingo.render(request, 'work/work.html', {'worker_id': worker.id})