def testBothNoTags(self):
     target_pair = traffic_pair.TrafficTargetPair(
         [TrafficTarget('s1-r1', 100)], [
             TrafficTarget('s1-r1', 100),
         ], 's1-r1', False, None)
     self.assertEqual(target_pair.specTags, '-')
     self.assertEqual(target_pair.statusTags, '-')
     self.assertEqual(target_pair.urls, [])
     self.assertEqual(target_pair.displayTags, '')
 def testSpecOneTag(self):
     target_pair = traffic_pair.TrafficTargetPair([
         TrafficTarget('s1-r1', 100),
         TrafficTarget('s1-r1', None, tag='candidate')
     ], [], 's1-r1', False, None)
     self.assertEqual(target_pair.specTags, 'candidate')
     self.assertEqual(target_pair.statusTags, '-')
     self.assertEqual(target_pair.urls, [])
     self.assertEqual(target_pair.displayTags, 'candidate (currently -)')
 def testStatusOneTag(self):
     target_pair = traffic_pair.TrafficTargetPair([], [
         TrafficTarget('s1-r1', 100),
         TrafficTarget('s1-r1', None, tag='candidate', populate_url=True)
     ], 's1-r1', False, None)
     self.assertEqual(target_pair.specTags, '-')
     self.assertEqual(target_pair.statusTags, 'candidate')
     self.assertEqual(target_pair.urls,
                      ['https://candidate---service.uc.a.run.app/'])
     self.assertEqual(target_pair.displayTags, '- (currently candidate)')
 def testMultipleStatusTargetsWithPercentRevisionName(self):
     target_pair = traffic_pair.TrafficTargetPair([], [
         TrafficTarget('s1-r2', 40),
         TrafficTarget('s1-r2', None),
         TrafficTarget('s1-r2', 60)
     ], 's1-r2', False, None)
     self.assertEqual(target_pair.key, 's1-r2')
     self.assertFalse(target_pair.latestRevision)
     self.assertEqual(target_pair.revisionName, 's1-r2')
     self.assertEqual(target_pair.specPercent, '-')
     self.assertEqual(target_pair.statusPercent, '100')
     self.assertEqual(target_pair.displayRevisionId, 's1-r2')
     self.assertEqual(target_pair.displayPercent, '-    (currently 100%)')
 def testMultipleStatusTargetsWithOverrideLatest(self):
     target_pair = traffic_pair.TrafficTargetPair([], [
         TrafficTarget(traffic.LATEST_REVISION_KEY, 40),
         TrafficTarget(traffic.LATEST_REVISION_KEY, None),
         TrafficTarget(traffic.LATEST_REVISION_KEY, 60)
     ], 's1-r2', True, 80)
     self.assertEqual(target_pair.key, traffic.LATEST_REVISION_KEY)
     self.assertTrue(target_pair.latestRevision)
     self.assertEqual(target_pair.revisionName, 's1-r2')
     self.assertEqual(target_pair.specPercent, '-')
     self.assertEqual(target_pair.statusPercent, '80')
     self.assertEqual(target_pair.displayRevisionId,
                      'LATEST (currently s1-r2)')
     self.assertEqual(target_pair.displayPercent, '-    (currently 80%)')
 def testBothMultipleTags(self):
     target_pair = traffic_pair.TrafficTargetPair([
         TrafficTarget('s1-r1', 100),
         TrafficTarget('s1-r1', None, tag='candidate'),
         TrafficTarget('s1-r1', None, tag='head')
     ], [
         TrafficTarget('s1-r1', 100),
         TrafficTarget('s1-r1', None, tag='candidate', populate_url=True),
         TrafficTarget('s1-r1', None, tag='head', populate_url=True)
     ], 's1-r1', False, None)
     self.assertEqual(target_pair.specTags, 'candidate, head')
     self.assertEqual(target_pair.statusTags, 'candidate, head')
     self.assertEqual(target_pair.urls, [
         'https://candidate---service.uc.a.run.app/',
         'https://head---service.uc.a.run.app/'
     ])
     self.assertEqual(target_pair.displayTags, 'candidate, head')
 def testSortsTagsAndUrls(self):
     target_pair = traffic_pair.TrafficTargetPair([
         TrafficTarget('s1-r1', 100),
         TrafficTarget('s1-r1', tag='c'),
         TrafficTarget('s1-r1', tag='b'),
         TrafficTarget('s1-r1', tag='a'),
         TrafficTarget('s1-r1', tag='d')
     ], [
         TrafficTarget('s1-r1', 100),
         TrafficTarget('s1-r1', tag='d', populate_url=True),
         TrafficTarget('s1-r1', tag='c', populate_url=True),
         TrafficTarget('s1-r1', tag='a', populate_url=True),
         TrafficTarget('s1-r1', tag='b', populate_url=True),
     ], 's1-r1', False, None)
     self.assertEqual(target_pair.specTags, 'a, b, c, d')
     self.assertEqual(target_pair.statusTags, 'a, b, c, d')
     self.assertEqual(target_pair.urls, [
         'https://a---service.uc.a.run.app/',
         'https://b---service.uc.a.run.app/',
         'https://c---service.uc.a.run.app/',
         'https://d---service.uc.a.run.app/',
     ])
     self.assertEqual(target_pair.displayTags, 'a, b, c, d')
def NewTrafficTargetPair(latest_revision_name,
                         spec_percent=None,
                         spec_latest=None,
                         spec_revision_name=None,
                         status_percent=None,
                         status_latest=None,
                         status_revision_name=None,
                         status_percent_override=None,
                         service_url=''):

    if (spec_percent is not None or spec_latest is not None
            or spec_revision_name is not None):
        spec_traffic = [
            MESSAGES.TrafficTarget(latestRevision=spec_latest,
                                   revisionName=spec_revision_name,
                                   percent=spec_percent)
        ]
    else:
        spec_traffic = []

    if (status_percent is not None and
        (status_latest is not None or status_revision_name is not None)):
        status_traffic = [
            MESSAGES.TrafficTarget(latestRevision=status_latest,
                                   revisionName=status_revision_name,
                                   percent=status_percent)
        ]
    else:
        status_traffic = []

    revision_name = (spec_revision_name or status_revision_name
                     or latest_revision_name)
    is_latest = spec_latest or status_latest
    return traffic_pair.TrafficTargetPair(spec_traffic, status_traffic,
                                          revision_name, is_latest,
                                          status_percent_override, service_url)