def CreateSuccessfulRecord(self): """Returns a Record with a successful request/response pair. Returns: A (BidResopnse, Record) pair. The bid_response is returned for convenience so a test method can make a slight modification and serialize it into record.bid_response without parsing record.bid_response first. """ bid_request = realtime_bidding_pb2.BidRequest() bid_request.id = 'id111' request_adslot = bid_request.adslot.add() request_adslot.id = 123 request_adslot.height.append(468) request_adslot.width.append(60) status = 200 bid_response = realtime_bidding_pb2.BidResponse() bid_response.processing_time_ms = 10 ad = bid_response.ad.add() ad.click_through_url.append('http://url.com') ad.html_snippet = ('A snippet. <a href=\'%%CLICK_URL_UNESC%%' 'http://www.google.com\'>link</a>') adslot = ad.adslot.add() adslot.id = 123 adslot.max_cpm_micros = 5000000 record = log.Record(bid_request, status, bid_response.SerializeToString()) return bid_response, record
def testSummarizePingRequest(self): """Tests summarizing a ping request.""" bid_request = realtime_bidding_pb2.BidRequest() bid_request.id = 'id111' bid_request.is_ping = True bid_response = realtime_bidding_pb2.BidResponse() bid_response.processing_time_ms = 0 record = log.Record(bid_request, 200, bid_response.SerializeToString()) self.records.append(record) self.summarizer = log.LogSummarizer(self.records) self.summarizer.Summarize() self.CheckNGoodRequests(1)
def CreateSuccessfulTemplateRecord(self): """Returns a Record with a successful request/response for a template ad. Returns: A (BidResopnse, Record) pair. The bid_response is returned for convenience so a test method can make a slight modification and serialize it into record.bid_response without parsing record.bid_response first. """ bid_request = realtime_bidding_pb2.BidRequest() bid_request.id = 'id111' request_adslot = bid_request.adslot.add() request_adslot.id = 123 request_adslot.height.append(468) request_adslot.width.append(60) status = 200 bid_response = realtime_bidding_pb2.BidResponse() bid_response.processing_time_ms = 10 ad = bid_response.ad.add() ad.snippet_template = 'Template %%P0%%, %%P1%%.' param = ad.template_parameter.add() param.parameter_value = 'value0' param.left = 1 param.right = 15 param.top = 20 param.bottom = 1 param.click_through_url = 'http://url1.com' param.buyer_creative_id = '12345' param = ad.template_parameter.add() param.parameter_value = 'value1' param.left = 1 param.right = 15 param.top = 35 param.bottom = 21 param.click_through_url = 'http://url2.com' param.buyer_creative_id = '54321' adslot = ad.adslot.add() adslot.id = 123 adslot.max_cpm_micros = 5000000 record = log.Record(bid_request, status, bid_response.SerializeToString()) return bid_response, record
def CreateSuccessfulVideoRecord(self): """Returns a Record with a successful video request/response pair. Returns: A (BidResopnse, Record) pair. The bid_response is returned for convenience so a test method can make a slight modification and serialize it into record.bid_response without parsing record.bid_response first. """ bid_request = realtime_bidding_pb2.BidRequest() bid_request.id = 'id111' bid_request.video.videoad_start_delay = 1000 request_adslot = bid_request.adslot.add() request_adslot.id = 123 status = 200 bid_response = realtime_bidding_pb2.BidResponse() bid_response.processing_time_ms = 10 ad = bid_response.ad.add() ad.click_through_url.append('http://url.com') ad.video_url = 'http://my.video.url.com' adslot = ad.adslot.add() adslot.id = 123 adslot.max_cpm_micros = 5000000 record = log.Record(bid_request, status, bid_response.SerializeToString()) return bid_response, record
def Summarize(self): """Collects and summarizes information from the logger.""" for record in self._logger: self._requests_sent += 1 if record.status == httplib.OK: self._responses_ok += 1 else: # Responded with a non-OK code, don't to parse. record.problems.append(self.REQUEST_ERROR_MESSAGES['not-ok']) self._error.append(record) continue if not record.payload: record.problems.append(self.RESPONSE_ERROR_MESSAGES['empty']) self._invalid.append(record) # Empty response, don't try to parse. continue bid_response = realtime_bidding_pb2.BidResponse() try: bid_response.ParseFromString(record.payload) except google.protobuf.message.DecodeError: record.problems.append( self.RESPONSE_ERROR_MESSAGES['parse-error']) self._invalid.append(record) # Unparseable response, don't check its validity. continue if not bid_response.IsInitialized(): # It parsed but the message is not initialized which means it's not # well-formed, consider this unparseable. record.problems.append( self.RESPONSE_ERROR_MESSAGES['uninitialized']) self._invalid.append(record) continue record.bid_response = bid_response if not bid_response.HasField('processing_time_ms'): record.problems.append( self.RESPONSE_ERROR_MESSAGES['no-processing-time']) else: self._processing_time_count += 1 self._processing_time_sum += bid_response.processing_time_ms if record.bid_request.is_ping: self.ValidatePing(record) else: if not bid_response.ad: self._responses_successful_without_bids += 1 self._good.append(record) continue # No ads returned, don't validate ads. for i, ad in enumerate(bid_response.ad): self.ValidateAd(ad, i, record) if record.problems: self._problematic.append(record) else: self._good.append(record)