# This test ensures the Watcher continues to serve some capability state
# even in the face of errors. It also ensures that the Watcher is able to
# transparently restart and update the global tenant capability state when
# that happens.

start
----
ok

updates
----

upsert ten=10 name=foo service=shared can_admin_unsplit=true
----
ok

upsert ten=11 name=bar can_admin_unsplit=false
----
ok

upsert ten=12 name=baz data=ready can_admin_unsplit=false
----
ok

updates
----
update: ten=10 name=foo state=add service=shared cap={can_admin_unsplit:true}
update: ten=11 name=bar state=add service=none cap={default}
update: ten=12 name=baz state=ready service=none cap={default}

inject-error
----
big-yikes

# Update some more state. However, because of the injected error, we shouldn't
# observe any updates.

upsert ten=12 name=bli data=add can_admin_unsplit=true
----
ok

delete ten=10
----
ok

upsert ten=50 name=blax can_admin_unsplit=false
----
ok

updates
----

# However, we should still be able to query the tenant capabilities that the
# Watcher was serving before the error happened.

flush-state
----
ten=10 name=foo state=add service=shared cap={can_admin_unsplit:true}
ten=11 name=bar state=add service=none cap={default}
ten=12 name=baz state=ready service=none cap={default}

get-capabilities ten=50
----
not-found

get-capabilities ten=12
----
ten=12 name=baz state=ready service=none cap={default}

get-capabilities ten=10
----
ten=10 name=foo state=add service=shared cap={can_admin_unsplit:true}

# Let the Watcher attempt to restart.
restart-after-injected-error
----
ok

# We expect the Watcher to kickoff a full table scan (complete update) once the
# it is able to restart.
updates
----
update: ten=11 name=bar state=add service=none cap={default}
update: ten=12 name=bli state=add service=none cap={can_admin_unsplit:true}
update: ten=50 name=blax state=add service=none cap={default}

flush-state
----
ten=11 name=bar state=add service=none cap={default}
ten=12 name=bli state=add service=none cap={can_admin_unsplit:true}
ten=50 name=blax state=add service=none cap={default}

get-capabilities ten=50
----
ten=50 name=blax state=add service=none cap={default}

get-capabilities ten=12
----
ten=12 name=bli state=add service=none cap={can_admin_unsplit:true}

get-capabilities ten=10
----
not-found
