blob: 3bb44c646994640116dc65098af597014d4449b3 [file] [log] [blame]
load('@stdlib//internal/luci/lib/swarming.star', 'swarming')
def test_dimension_ctor():
def eq(dim, value, expiration):
assert.eq(dim.value, value)
assert.eq(dim.expiration, expiration)
eq(swarming.dimension('abc'), 'abc', None)
eq(swarming.dimension('abc', time.minute), 'abc', time.minute)
eq(swarming.dimension('abc', 5*time.minute), 'abc', 5*time.minute)
# 'value' validation.
assert.fails(lambda: swarming.dimension(123), 'got int, want string')
assert.fails(lambda: swarming.dimension(''), 'must not be empty')
assert.fails(lambda: swarming.dimension('a'*257), 'must be at most 256 chars')
assert.fails(lambda: swarming.dimension(' a'), 'must not have leading or trailing whitespace')
# 'expiration' validation.
assert.fails(lambda: swarming.dimension('a', 300), 'got int, want duration')
assert.fails(lambda: swarming.dimension('a', time.zero), '0s should be >= 1m0s')
assert.fails(lambda: swarming.dimension('a', 61*time.second), 'losing precision when truncating 1m1s to 1m0s units')
def test_validate_dimensions():
call = lambda dims: swarming.validate_dimensions('dims', dims)
v1 = swarming.dimension('v1')
v2 = swarming.dimension('v2', expiration=5*time.minute)
assert.eq(call(None), {})
assert.eq(call({'a': 'v1', 'b': v2}), {'a': [v1], 'b': [v2]})
assert.eq(call({'a': ['v1', v2]}), {'a': [v1, v2]})
assert.fails(lambda: call({123: 'v1'}), 'got int key, want string')
assert.fails(lambda: call({'111': 'v1'}), '"111" should match')
assert.fails(lambda: call({'a': 123}), 'got int, want swarming.dimension')
test_dimension_ctor()
test_validate_dimensions()