186 lines
7.1 KiB
Python
Executable File
186 lines
7.1 KiB
Python
Executable File
#!/usr/bin/python2.7
|
|
#
|
|
# Copyright 2017 The Chromium OS Authors. All rights reserved.
|
|
# Use of this source code is governed by a BSD-style license that can be
|
|
# found in the LICENSE file.
|
|
|
|
import copy
|
|
import unittest
|
|
|
|
import common
|
|
from autotest_lib.utils import labellib
|
|
|
|
|
|
class KeyvalLabelTestCase(unittest.TestCase):
|
|
"""Tests for basic KeyvalLabel functions."""
|
|
|
|
def test_parse_keyval_label(self):
|
|
got = labellib.parse_keyval_label('pool:suites')
|
|
self.assertEqual(got, labellib.KeyvalLabel('pool', 'suites'))
|
|
|
|
def test_parse_keyval_label_with_multiple_colons(self):
|
|
got = labellib.parse_keyval_label('pool:suites:penthouse')
|
|
self.assertEqual(got, labellib.KeyvalLabel('pool', 'suites:penthouse'))
|
|
|
|
def test_parse_keyval_label_raises(self):
|
|
with self.assertRaises(ValueError):
|
|
labellib.parse_keyval_label('webcam')
|
|
|
|
def test_format_keyval_label(self):
|
|
got = labellib.format_keyval_label(
|
|
labellib.KeyvalLabel('pool', 'suites'))
|
|
self.assertEqual(got, 'pool:suites')
|
|
|
|
def test_format_keyval_label_with_colon_in_value(self):
|
|
got = labellib.format_keyval_label(
|
|
labellib.KeyvalLabel('pool', 'suites:penthouse'))
|
|
self.assertEqual(got, 'pool:suites:penthouse')
|
|
|
|
|
|
class LabelsMappingTestCase(unittest.TestCase):
|
|
"""Tests for LabelsMapping class."""
|
|
|
|
def test_getlabels(self):
|
|
labels = ['webcam', 'pool:suites']
|
|
mapping = labellib.LabelsMapping(labels)
|
|
self.assertEqual(mapping.getlabels(), labels)
|
|
|
|
def test_init_and_getlabels_should_remove_duplicates(self):
|
|
labels = ['webcam', 'pool:suites', 'pool:party']
|
|
mapping = labellib.LabelsMapping(labels)
|
|
self.assertEqual(mapping.getlabels(), ['webcam', 'pool:suites'])
|
|
|
|
def test_init_and_getlabels_should_move_plain_labels_first(self):
|
|
labels = ['ohse:tsubame', 'webcam']
|
|
mapping = labellib.LabelsMapping(labels)
|
|
self.assertEqual(mapping.getlabels(), ['webcam', 'ohse:tsubame'])
|
|
|
|
def test_init_and_getlabels_should_preserve_plain_label_order(self):
|
|
labels = ['webcam', 'exec', 'method']
|
|
mapping = labellib.LabelsMapping(labels)
|
|
self.assertEqual(mapping.getlabels(), ['webcam', 'exec', 'method'])
|
|
|
|
def test_init_and_getlabels_should_preserve_keyval_label_order(self):
|
|
labels = ['class:protecta', 'method:metafalica', 'exec:chronicle_key']
|
|
mapping = labellib.LabelsMapping(labels)
|
|
self.assertEqual(mapping.getlabels(), labels)
|
|
|
|
def test_init_should_not_mutate_labels(self):
|
|
labels = ['class:protecta', 'exec:chronicle_key', 'method:metafalica']
|
|
input_labels = copy.deepcopy(labels)
|
|
mapping = labellib.LabelsMapping(input_labels)
|
|
mapping['class'] = 'distllista'
|
|
self.assertEqual(input_labels, labels)
|
|
|
|
def test_init_mutated_arg_should_not_affect_mapping(self):
|
|
labels = ['class:protecta', 'exec:chronicle_key', 'method:metafalica']
|
|
mapping = labellib.LabelsMapping(labels)
|
|
original_mapping = copy.deepcopy(mapping)
|
|
labels.pop()
|
|
self.assertEqual(mapping, original_mapping)
|
|
|
|
def test_duplicate_keys_should_take_first(self):
|
|
labels = ['webcam', 'pool:party', 'pool:suites']
|
|
mapping = labellib.LabelsMapping(labels)
|
|
self.assertEqual(mapping['pool'], 'party')
|
|
|
|
def test_getitem(self):
|
|
labels = ['webcam', 'pool:suites']
|
|
mapping = labellib.LabelsMapping(labels)
|
|
self.assertEqual(mapping['pool'], 'suites')
|
|
|
|
def test_in(self):
|
|
labels = ['webcam', 'pool:suites']
|
|
mapping = labellib.LabelsMapping(labels)
|
|
self.assertIn('pool', mapping)
|
|
|
|
def test_setitem(self):
|
|
labels = ['webcam']
|
|
mapping = labellib.LabelsMapping(labels)
|
|
mapping['pool'] = 'suites'
|
|
self.assertEqual(mapping['pool'], 'suites')
|
|
|
|
def test_setitem_to_none_should_delete(self):
|
|
labels = ['webcam', 'pool:suites']
|
|
mapping = labellib.LabelsMapping(labels)
|
|
mapping['pool'] = None
|
|
self.assertNotIn('pool', mapping)
|
|
|
|
def test_setitem_to_none_with_missing_key_should_noop(self):
|
|
labels = ['webcam', 'pool:suites']
|
|
mapping = labellib.LabelsMapping(labels)
|
|
mapping['foo'] = None
|
|
self.assertNotIn('foo', mapping)
|
|
|
|
def test_delitem(self):
|
|
labels = ['webcam', 'pool:suites']
|
|
mapping = labellib.LabelsMapping(labels)
|
|
del mapping['pool']
|
|
self.assertNotIn('pool', mapping)
|
|
|
|
def test_iter(self):
|
|
labels = ['webcam', 'pool:suites']
|
|
mapping = labellib.LabelsMapping(labels)
|
|
self.assertEqual(list(iter(mapping)), ['pool'])
|
|
|
|
def test_len(self):
|
|
labels = ['webcam', 'pool:suites']
|
|
mapping = labellib.LabelsMapping(labels)
|
|
self.assertEqual(len(mapping), 1)
|
|
|
|
|
|
class CrosVersionTestCase(unittest.TestCase):
|
|
"""Tests for CrosVersion functions."""
|
|
|
|
def test_parse_cros_version_without_rc(self):
|
|
got = labellib.parse_cros_version('lumpy-release/R27-3773.0.0')
|
|
self.assertEqual(got, labellib.CrosVersion('lumpy-release', 'lumpy',
|
|
'R27', '3773.0.0', None))
|
|
|
|
def test_parse_cros_version_with_rc(self):
|
|
got = labellib.parse_cros_version('lumpy-release/R27-3773.0.0-rc1')
|
|
self.assertEqual(got, labellib.CrosVersion('lumpy-release', 'lumpy',
|
|
'R27', '3773.0.0', 'rc1'))
|
|
|
|
def test_parse_cros_version_raises(self):
|
|
with self.assertRaises(ValueError):
|
|
labellib.parse_cros_version('foo')
|
|
|
|
def test_format_cros_version_without_rc(self):
|
|
got = labellib.format_cros_version(
|
|
labellib.CrosVersion('lumpy-release', 'lumpy', 'R27',
|
|
'3773.0.0', None))
|
|
self.assertEqual(got, 'lumpy-release/R27-3773.0.0')
|
|
|
|
def test_format_cros_version_with_rc(self):
|
|
got = labellib.format_cros_version(
|
|
labellib.CrosVersion('lumpy-release', 'lumpy', 'R27',
|
|
'3773.0.0', 'rc1'))
|
|
self.assertEqual(got, 'lumpy-release/R27-3773.0.0-rc1')
|
|
|
|
def test_parse_cros_version_for_board(self):
|
|
test_builds = ['lumpy-release/R27-3773.0.0-rc1',
|
|
'trybot-lumpy-paladin/R27-3773.0.0',
|
|
'lumpy-pre-cq/R27-3773.0.0-rc1',
|
|
'lumpy-test-ap/R27-3773.0.0-rc1',
|
|
'lumpy-toolchain/R27-3773.0.0-rc1',
|
|
]
|
|
for build in test_builds:
|
|
cros_version = labellib.parse_cros_version(build)
|
|
self.assertEqual(cros_version.board, 'lumpy')
|
|
self.assertEqual(cros_version.milestone, 'R27')
|
|
|
|
build = 'trybot-lumpy-a-pre-cq/R27-3773.0.0-rc1'
|
|
cros_version = labellib.parse_cros_version(build)
|
|
self.assertEqual(cros_version.board, 'lumpy-a')
|
|
self.assertEqual(cros_version.milestone, 'R27')
|
|
|
|
build = 'trybot-lumpy_a-pre-cq/R27-3773.0.0-rc1'
|
|
cros_version = labellib.parse_cros_version(build)
|
|
self.assertEqual(cros_version.board, 'lumpy_a')
|
|
self.assertEqual(cros_version.milestone, 'R27')
|
|
|
|
|
|
if __name__ == '__main__':
|
|
unittest.main()
|