1982
1983
// TestDeleteNamespaceIdempotency tests that delete operations are idempotent
1985
>
id := uuid.NewString()
1986
>
name := "delete-idempotent-test-namespace"
1987
>
state := enumspb.NAMESPACE_STATE_REGISTERED
1988
>
description := "delete-idempotent-test-description"
1989
>
owner := "delete-idempotent-test-owner"
1990
>
retention := int32(10)
1991
>
1992
>
clusterActive := "some random active cluster name"
1993
>
configVersion := int64(10)
1994
>
failoverVersion := int64(59)
1995
>
isGlobalNamespace := false
1996
>
1997
>
// Create namespace
1998
>
resp1, err1 := m.CreateNamespace(
1999
>
&persistencespb.NamespaceInfo{
2000
>
Id: id,
2001
>
Name: name,
2002
>
State: state,
2003
>
Description: description,
2004
>
Owner: owner,
2005
>
},
2006
>
&persistencespb.NamespaceConfig{
2007
>
Retention: timestamp.DurationFromDays(retention),
2008
>
},
2009
>
&persistencespb.NamespaceReplicationConfig{
2010
>
ActiveClusterName: clusterActive,
2011
>
Clusters: []string{clusterActive},
2012
>
},
2013
>
isGlobalNamespace,
2014
>
configVersion,
2015
>
failoverVersion,
2016
>
)
2017
>
m.NoError(err1)
2018
>
m.NotNil(resp1)
2019
>
2020
>
// Verify it exists
2021
>
resp2, err2 := m.GetNamespace(id, "")
2022
>
m.NoError(err2)
2023
>
m.NotNil(resp2)
2024
>
m.Equal(name, resp2.Namespace.Info.Name)
2025
>
2026
>
// Delete by ID - first delete should succeed
2027
>
err3 := m.DeleteNamespace(id, "")
2028
>
m.NoError(err3)
2029
>
2030
>
// May need to loop here to avoid potential inconsistent read-after-write in cassandra
2031
>
m.Eventually(
2032
>
func() bool {
2033
>
resp, err := m.GetNamespace(id, "")
2034
>
if errors.As(err, new(*serviceerror.NamespaceNotFound)) {
2035
>
m.Nil(resp)
2036
>
return true
2037
>
}
2038
return false
2039
},