Beispiel #1
0
  def GenerateTestcases(self, request: generator_pb2.GenerateTestcasesRequest,
                        context) -> generator_pb2.GenerateTestcasesResponse:
    """Generate testcases."""
    del context
    response = services.BuildDefaultResponse(
        generator_pb2.GenerateTestcasesResponse)

    # Generate random strings.
    for _ in range(request.num_testcases):
      # Pick a length for the random string.
      n = random.randint(self.config.string_min_len,
                         self.config.string_max_len + 1)
      # Instantiate a testcase.
      testcase = response.testcases.add()
      testcase.toolchain = self.config.toolchain
      testcase.generator.CopyFrom(self.generator)
      start_time = labdate.MillisecondsTimestamp()
      testcase.inputs['src'] = ''.join(
          random.choice(string.ascii_lowercase) for _ in range(n))
      end_time = labdate.MillisecondsTimestamp()
      p = testcase.profiling_events.add()
      p.type = 'generation'
      p.event_start_epoch_ms = start_time
      p.duration_ms = end_time - start_time

    return response
Beispiel #2
0
    def RunTestcases(self, request: harness_pb2.RunTestcasesRequest,
                     context) -> harness_pb2.RunTestcasesResponse:
        del context
        response = services.BuildDefaultResponse(
            harness_pb2.RunTestcasesResponse)
        if request.testbed not in self.testbeds:
            response.status.returncode = (
                service_pb2.ServiceStatus.INVALID_REQUEST_PARAMETERS)
            response.status.error_message = "Requested testbed not found."
            return response

        testbed_idx = self.testbeds.index(request.testbed)
        for i, testcase in enumerate(request.testcases):
            result = RunTestcase(
                self.envs[testbed_idx],
                self.testbeds[testbed_idx],
                testcase,
                list(self.config.opts),
            )
            app.Log(
                1,
                "Testcase %d: %s.",
                i + 1,
                deepsmith_pb2.Result.Outcome.Name(result.outcome),
            )
            response.results.extend([result])

        return response
Beispiel #3
0
 def SubmitResults(self, request: datastore_pb2.SubmitResultsRequest,
                   context) -> datastore_pb2.SubmitResultsResponse:
     del context
     app.Log(1, "SubmitResults() client=%s", request.status.client)
     response = services.BuildDefaultResponse(
         datastore_pb2.SubmitResultsResponse)
     # TODO(cec): Implement!
     return response
Beispiel #4
0
 def SubmitTestcases(self, request: datastore_pb2.SubmitTestcasesRequest,
                     context) -> datastore_pb2.SubmitTestcasesResponse:
     del context
     logging.info('SubmitTestcases() client=%s', request.status.client)
     response = services.BuildDefaultResponse(
         datastore_pb2.SubmitTestcasesResponse)
     # TODO(cec): Implement!
     return response
Beispiel #5
0
 def GetGeneratorCapabilities(
         self, request: generator_pb2.GetGeneratorCapabilitiesRequest,
         context) -> generator_pb2.GetGeneratorCapabilitiesResponse:
     del context
     response = services.BuildDefaultResponse(
         generator_pb2.GetGeneratorCapabilitiesRequest)
     response.toolchain = self.config.model.corpus.language
     response.generator = self.generator
     return response
Beispiel #6
0
 def GetHarnessCapabilities(
         self, request: harness_pb2.GetHarnessCapabilitiesRequest,
         context) -> harness_pb2.GetHarnessCapabilitiesResponse:
     """Get the harness capabilities."""
     del context
     response = services.BuildDefaultResponse(
         harness_pb2.GetHarnessCapabilitiesRequest)
     response.harness.name = 'cldrive'
     response.testbed.extend(self.testbeds)
     return response
Beispiel #7
0
    def GenerateTestcases(self,
                          request: generator_pb2.GenerateTestcasesRequest,
                          context) -> generator_pb2.GenerateTestcasesResponse:
        del context
        response = services.BuildDefaultResponse(
            generator_pb2.GenerateTestcasesResponse)
        with self.instance.Session():
            sample_observer = SampleObserver(self.config, response,
                                             request.num_testcases)
            self.instance.model.Sample(self.instance.sampler,
                                       [sample_observer])

        return response
Beispiel #8
0
 def GenerateTestcases(self,
                       request: generator_pb2.GenerateTestcasesRequest,
                       context) -> generator_pb2.GenerateTestcasesResponse:
     del context
     num_programs = int(
         math.ceil(request.num_testcases /
                   len(self.config.testcase_skeleton)))
     response = services.BuildDefaultResponse(
         generator_pb2.GenerateTestcasesResponse)
     try:
         for i in range(num_programs):
             response.testcases.extend(
                 self.SourceToTestcases(*self.GenerateOneSource()))
             logging.info('Generated file %d.', i + 1)
     except clsmith.CLSmithError as e:
         response.status.returncode = service_pb2.ServiceStatus.ERROR
         response.status.error_message = str(e)
     return response
Beispiel #9
0
    def GenerateTestcases(self,
                          request: generator_pb2.GenerateTestcasesRequest,
                          context) -> generator_pb2.GenerateTestcasesResponse:
        del context
        response = services.BuildDefaultResponse(
            generator_pb2.GenerateTestcasesResponse)
        with self.instance.Session():
            num_programs = math.ceil(request.num_testcases /
                                     len(self.config.testcase_skeleton))
            for i, sample_ in enumerate(
                    self.instance.model.Sample(self.instance.sampler,
                                               num_programs)):
                logging.info('Generated sample %d.', i + 1)
                response.testcases.extend(self.SampleToTestcases(sample_))

        # Flush any remaining output generated during Sample().
        sys.stdout.flush()
        return response
Beispiel #10
0
  def GetGeneratorCapabilities(
      self, request: generator_pb2.GetGeneratorCapabilitiesRequest,
      context) -> generator_pb2.GetGeneratorCapabilitiesResponse:
    """Get the capabilities of the generator service.

    Args:
      request: A request proto.
      context: RPC context. Unused.

    Returns:
      A response proto.
    """
    del context
    response = services.BuildDefaultResponse(
        generator_pb2.GetGeneratorCapabilitiesRequest)
    response.toolchain = self.toolchain
    response.generator = self.generator
    return response
Beispiel #11
0
    def RunTestcases(self, request: harness_pb2.RunTestcasesRequest,
                     context) -> harness_pb2.RunTestcasesResponse:
        del context
        response = services.BuildDefaultResponse(
            harness_pb2.RunTestcasesResponse)
        if request.testbed not in self.testbeds:
            response.status.returncode = service_pb2.ServiceStatus.INVALID_REQUEST_PARAMETERS
            response.status.error_message = 'Requested testbed not found.'
            return response

        testbed_idx = self.testbeds.index(request.testbed)
        for i, testcase in enumerate(request.testcases):
            result = RunTestcase(self.envs[testbed_idx],
                                 self.testbeds[testbed_idx], testcase,
                                 self.config.driver_cflag)
            logging.info('Testcase %d: %s.', i + 1,
                         deepsmith_pb2.Result.Outcome.Name(result.outcome))
            response.results.extend([result])

        return response
Beispiel #12
0
  def GenerateTestcases(self, request: generator_pb2.GenerateTestcasesRequest,
                        context) -> generator_pb2.GenerateTestcasesResponse:
    """Generate testcases."""
    del context
    response = services.BuildDefaultResponse(
        generator_pb2.GenerateTestcasesResponse)

    # Generate random strings.
    for _ in range(request.num_testcases):
      # Instantiate a testcase.
      testcase = response.testcases.add()
      testcase.CopyFrom(self.config.testcase_to_generate)
      testcase.generator.CopyFrom(self.generator)
      start_time = labdate.MillisecondsTimestamp()
      end_time = labdate.MillisecondsTimestamp()
      p = testcase.profiling_events.add()
      p.type = 'generation'
      p.event_start_epoch_ms = start_time
      p.duration_ms = end_time - start_time

    return response