blob: 85af6df5641ae30961acfd5f00713be199920958 [file] [log] [blame]
load('@stdlib//internal/graph.star', 'graph')
load('@stdlib//internal/luci/common.star', 'builder_ref', 'keys')
def test_follow_refs():
def builder(bucket, name):
k = keys.builder(bucket, name)
graph.add_node(k)
builder_ref.add(k)
return k
builder1 = builder('bucket1', 'builder')
builder2 = builder('bucket2', 'builder')
builder3 = builder('bucket', 'builder3')
referrer = graph.key('some_node', 'some name')
graph.add_node(referrer)
__native__.graph().finalize()
def follow(ref_name):
ref_node = graph.node(keys.builder_ref(ref_name))
assert.true(ref_node != None)
return builder_ref.follow(ref_node, graph.node(referrer))
# Follows non-ambiguous refs.
assert.eq(follow('bucket1/builder'), graph.node(builder1))
assert.eq(follow('bucket2/builder'), graph.node(builder2))
assert.eq(follow('builder3'), graph.node(builder3))
# Detects ambiguities.
assert.fails(lambda: follow('builder'), 'ambiguous reference')
def with_clean_state(cb):
__native__.clear_state()
__native__.fail_on_errors()
cb()
with_clean_state(test_follow_refs)