Ejemplo n.º 1
0
  def test_creates_event_mon_event_correctly(self):
    TestFile.add_file(
        'master', 'builder', 'ui_tests', 123, 'full_results.json',
        json.dumps(TEST_JSON))
    response = self.test_app.post('/internal/monitoring/upload', REQ_PAYLOAD)

    self.assertEqual(200, response.status_int)
    events = self.read_event_mon_file()
    self.assertEqual(1, len(events))
    self.assertEqual(events[0].test_results.master_name, 'master')
    self.assertEqual(events[0].test_results.builder_name, 'builder')
    self.assertEqual(events[0].test_results.build_number, 123)
    self.assertEqual(events[0].test_results.test_type, 'ui_tests')
    self.assertEqual(events[0].test_results.step_name, 'ui_tests 12s pending')
    self.assertEqual(events[0].test_results.interrupted, False)
    self.assertEqual(events[0].test_results.version, 3)
    self.assertEqual(events[0].test_results.usec_since_epoch, 1457612314123000)
    self.assertEqual(1, len(events[0].test_results.tests))
    self.assertEqual(
        events[0].test_results.tests[0].test_name,
        'web-animations-api\\animation-state-changes.html')
    self.assertEqual(
        events[0].test_results.tests[0].expected,
        [
          event_mon.protos.chrome_infra_log_pb2.TestResultsEvent.PASS,
          event_mon.protos.chrome_infra_log_pb2.TestResultsEvent.IMAGE_TEXT,
          event_mon.protos.chrome_infra_log_pb2.TestResultsEvent.UNKNOWN,
        ])
    self.assertEqual(
        events[0].test_results.tests[0].actual,
        [event_mon.protos.chrome_infra_log_pb2.TestResultsEvent.PASS])
Ejemplo n.º 2
0
 def test_does_not_crash_on_missing_required_fields_in_json(self):
   TestFile.add_file(
       'master', 'builder', 'ui_tests', 123, 'full_results.json', '{}')
   response = self.test_app.post('/internal/monitoring/upload', REQ_PAYLOAD)
   self.assertEqual(200, response.status_int)
   events = self.read_event_mon_file()
   self.assertEqual(1, len(events))
   self.assertFalse(events[0].test_results.HasField('interrupted'))
   self.assertFalse(events[0].test_results.HasField('version'))
   self.assertFalse(events[0].test_results.HasField('usec_since_epoch'))
   self.assertEqual(0, len(events[0].test_results.tests))
Ejemplo n.º 3
0
  def test_creates_event_mon_event_correctly(self):
    TestFile.add_file(
        'master', 'builder', 'ui_tests', 123, 'full_results.json',
        json.dumps(TEST_JSON))
    response = self.test_app.post('/internal/monitoring/upload', {
      'master': 'master',
      'builder': 'builder',
      'build_number': '123',
      'test_type': 'ui_tests',
    })

    self.assertEqual(200, response.status_int)
Ejemplo n.º 4
0
    def post(self):  # pragma: no cover
        file_params = self.request.POST.getall(PARAM_FILE)
        if not file_params:
            self.response.out.write("FAIL: missing upload file field.")
            return

        builder = self.request.get(PARAM_BUILDER)
        if not builder:
            self.response.out.write("FAIL: missing builder parameter.")
            return

        master_parameter = self.request.get(PARAM_MASTER)

        master_data = master_config.getMasterByMasterName(master_parameter)
        if master_data:
            deprecated_master = master_parameter
            master = master_data['url_name']
        else:
            deprecated_master = None
            master = master_parameter

        test_type = self.request.get(PARAM_TEST_TYPE)

        logging.debug(
            "Processing upload request, master: %s, builder: %s, test_type: %s.",
            master, builder, test_type)

        # There are two possible types of each file_params in the request:
        # one file item or a list of file items.
        # Normalize file_params to a file item list.
        files = []
        logging.debug("test: %s, type:%s", file_params, type(file_params))
        for item in file_params:
            if not isinstance(item, list) and not isinstance(item, tuple):
                item = [item]
            files.extend(item)

        errors = []
        final_status_code = 200
        for record in files:
            file_json = JsonResults.load_json(record.value)
            if record.filename == "incremental_results.json":
                # FIXME: Ferret out and eliminate remaining incremental_results.json
                # producers.
                logging.info(
                    ("incremental_results.json received from master: %s, "
                     "builder: %s, test_type: %s."), master, builder,
                    test_type)
                status_string, status_code = JsonResults.update(
                    master,
                    builder,
                    test_type,
                    file_json,
                    deprecated_master=deprecated_master,
                    is_full_results_format=False)
            else:
                try:
                    build_number = int(file_json.get('build_number', 0))
                    status_string, status_code = TestFile.add_file(
                        master, builder, test_type, build_number,
                        record.filename, record.value)
                except (ValueError, TypeError):
                    status_code = 403
                    status_string = (
                        'Could not cast the build_number field in the '
                        'json to an integer.')

                if status_code == 200:
                    logging.info(status_string)
                else:
                    logging.error(status_string)
                    errors.append(status_string)
                    final_status_code = status_code

            if status_code == 200 and record.filename == "full_results.json":
                status_string, status_code = JsonResults.update(
                    master,
                    builder,
                    test_type,
                    file_json,
                    deprecated_master=deprecated_master,
                    is_full_results_format=True)
                BuilderState.incremental_update(master, builder, test_type,
                                                datetime.now())

            if status_code == 200:
                logging.info(status_string)
            else:
                logging.error(status_string)
                errors.append(status_string)
                final_status_code = status_code

        if errors:
            messages = "FAIL: " + "; ".join(errors)
            self.response.set_status(final_status_code, messages)
            self.response.out.write(messages)
        else:
            self.response.set_status(200)
            self.response.out.write("OK")
Ejemplo n.º 5
0
  def post(self):  # pragma: no cover
    file_params = self.request.POST.getall(PARAM_FILE)
    if not file_params:
      self.response.out.write("FAIL: missing upload file field.")
      return

    builder = self.request.get(PARAM_BUILDER)
    if not builder:
      self.response.out.write("FAIL: missing builder parameter.")
      return

    master_parameter = self.request.get(PARAM_MASTER)

    master_data = master_config.getMasterByMasterName(master_parameter)
    if master_data:
      deprecated_master = master_parameter
      master = master_data['url_name']
    else:
      deprecated_master = None
      master = master_parameter

    test_type = self.request.get(PARAM_TEST_TYPE)
    test_type = util.normalize_test_type(test_type)

    logging.debug(
        "Processing upload request, master: %s, builder: %s, test_type: %s.",
        master, builder, test_type)

    # There are two possible types of each file_params in the request:
    # one file item or a list of file items.
    # Normalize file_params to a file item list.
    files = []
    logging.debug("test: %s, type:%s", file_params, type(file_params))
    for item in file_params:
      if not isinstance(item, list) and not isinstance(item, tuple):
        item = [item]
      files.extend(item)

    errors = []
    final_status_code = 200
    for record in files:
      file_json = JsonResults.load_json(record.value)
      if record.filename == "incremental_results.json":
        # FIXME: Ferret out and eliminate remaining incremental_results.json
        # producers.
        logging.info(("incremental_results.json received from master: %s, "
                      "builder: %s, test_type: %s."),
            master, builder, test_type)
        status_string, status_code = JsonResults.update(master, builder,
            test_type, file_json, deprecated_master=deprecated_master,
            is_full_results_format=False)
      else:
        try:
          build_number = int(file_json.get('build_number', 0))
          status_string, status_code = TestFile.add_file(master, builder,
              test_type, build_number, record.filename, record.value)
        except (ValueError, TypeError):
          status_code = 403
          status_string = ('Could not cast the build_number field in the '
                           'json to an integer.')

        if status_code == 200:
          logging.info(status_string)
        else:
          logging.error(status_string)
          errors.append(status_string)
          final_status_code = status_code

      if status_code == 200 and record.filename == "full_results.json":
        status_string, status_code = JsonResults.update(master, builder,
            test_type, file_json, deprecated_master=deprecated_master,
            is_full_results_format=True)
        BuilderState.incremental_update(master, builder, test_type,
            datetime.now())
        EventMonUploader.upload(master, builder, build_number, test_type,
            file_json)

      if status_code == 200:
        logging.info(status_string)
      else:
        logging.error(status_string)
        errors.append(status_string)
        final_status_code = status_code

    if errors:
      messages = "FAIL: " + "; ".join(errors)
      self.response.set_status(final_status_code, messages)
      self.response.out.write(messages)
    else:
      self.response.set_status(200)
      self.response.out.write("OK")