@@ -1084,27 +1084,135 @@ func (m *MetadataPersistenceSuiteV2) TestListNamespaces() {
10841084 }
10851085
10861086 var token []byte
1087- pageSize := 1
1087+ const pageSize = 1
1088+ pageCount := 0
10881089 outputNamespaces := make (map [string ]* p.GetNamespaceResponse )
1089- ListLoop:
10901090 for {
10911091 resp , err := m .ListNamespaces (pageSize , token )
10921092 m .NoError (err )
10931093 token = resp .NextPageToken
10941094 for _ , namespace := range resp .Namespaces {
1095- outputNamespaces [string ( namespace .Namespace .Info .Id ) ] = namespace
1095+ outputNamespaces [namespace .Namespace .Info .Id ] = namespace
10961096 // global notification version is already tested, so here we make it 0
10971097 // so we can test == easily
10981098 namespace .NotificationVersion = 0
10991099 }
1100+ pageCount ++
11001101 if len (token ) == 0 {
1101- break ListLoop
1102+ break
11021103 }
11031104 }
11041105
1106+ // 2 pages with data and 1 empty page which is unavoidable.
1107+ m .Equal (pageCount , 3 )
11051108 m .Equal (len (inputNamespaces ), len (outputNamespaces ))
11061109 for _ , namespace := range inputNamespaces {
1107- m .Equal (namespace , outputNamespaces [string (namespace .Namespace .Info .Id )])
1110+ m .Equal (namespace , outputNamespaces [namespace .Namespace .Info .Id ])
1111+ }
1112+ }
1113+
1114+ func (m * MetadataPersistenceSuiteV2 ) TestListNamespaces_DeletedNamespace () {
1115+ inputNamespaces := []* p.GetNamespaceResponse {
1116+ {
1117+ Namespace : & persistencespb.NamespaceDetail {
1118+ Info : & persistencespb.NamespaceInfo {
1119+ Id : uuid .New (),
1120+ Name : "list-namespace-test-name-1" ,
1121+ State : enumspb .NAMESPACE_STATE_REGISTERED ,
1122+ },
1123+ Config : & persistencespb.NamespaceConfig {},
1124+ ReplicationConfig : & persistencespb.NamespaceReplicationConfig {},
1125+ },
1126+ },
1127+ {
1128+ Namespace : & persistencespb.NamespaceDetail {
1129+ Info : & persistencespb.NamespaceInfo {
1130+ Id : uuid .New (),
1131+ Name : "list-namespace-test-name-2" ,
1132+ State : enumspb .NAMESPACE_STATE_DELETED ,
1133+ },
1134+ Config : & persistencespb.NamespaceConfig {},
1135+ ReplicationConfig : & persistencespb.NamespaceReplicationConfig {},
1136+ },
1137+ },
1138+ {
1139+ Namespace : & persistencespb.NamespaceDetail {
1140+ Info : & persistencespb.NamespaceInfo {
1141+ Id : uuid .New (),
1142+ Name : "list-namespace-test-name-3" ,
1143+ State : enumspb .NAMESPACE_STATE_REGISTERED ,
1144+ },
1145+ Config : & persistencespb.NamespaceConfig {},
1146+ ReplicationConfig : & persistencespb.NamespaceReplicationConfig {},
1147+ },
1148+ },
1149+ {
1150+ Namespace : & persistencespb.NamespaceDetail {
1151+ Info : & persistencespb.NamespaceInfo {
1152+ Id : uuid .New (),
1153+ Name : "list-namespace-test-name-4" ,
1154+ State : enumspb .NAMESPACE_STATE_DELETED ,
1155+ },
1156+ Config : & persistencespb.NamespaceConfig {},
1157+ ReplicationConfig : & persistencespb.NamespaceReplicationConfig {},
1158+ },
1159+ },
1160+ }
1161+ for _ , namespace := range inputNamespaces {
1162+ _ , err := m .CreateNamespace (
1163+ namespace .Namespace .Info ,
1164+ namespace .Namespace .Config ,
1165+ namespace .Namespace .ReplicationConfig ,
1166+ namespace .IsGlobalNamespace ,
1167+ namespace .Namespace .ConfigVersion ,
1168+ namespace .Namespace .FailoverVersion ,
1169+ )
1170+ m .NoError (err )
1171+ }
1172+
1173+ var token []byte
1174+ var listNamespacesPageSize2 []* p.GetNamespaceResponse
1175+ pageCount := 0
1176+ for {
1177+ resp , err := m .ListNamespaces (2 , token )
1178+ m .NoError (err )
1179+ token = resp .NextPageToken
1180+ for _ , namespace := range resp .Namespaces {
1181+ listNamespacesPageSize2 = append (listNamespacesPageSize2 , namespace )
1182+ }
1183+ pageCount ++
1184+ if len (token ) == 0 {
1185+ break
1186+ }
1187+ }
1188+
1189+ // 1 page with data and 1 empty page which is unavoidable.
1190+ m .Equal (2 , pageCount )
1191+ m .Len (listNamespacesPageSize2 , 2 )
1192+ for _ , namespace := range listNamespacesPageSize2 {
1193+ m .NotEqual (namespace .Namespace .Info .State , enumspb .NAMESPACE_STATE_DELETED )
1194+ }
1195+
1196+ pageCount = 0
1197+ var listNamespacesPageSize1 []* p.GetNamespaceResponse
1198+ for {
1199+ resp , err := m .ListNamespaces (1 , token )
1200+ m .NoError (err )
1201+ token = resp .NextPageToken
1202+ for _ , namespace := range resp .Namespaces {
1203+ listNamespacesPageSize1 = append (listNamespacesPageSize1 , namespace )
1204+ }
1205+ pageCount ++
1206+ if len (token ) == 0 {
1207+ break
1208+ }
1209+ }
1210+
1211+ // 2 pages with data and 1 empty page which is unavoidable.
1212+ m .Equal (3 , pageCount )
1213+ m .Len (listNamespacesPageSize1 , 2 )
1214+ for _ , namespace := range listNamespacesPageSize1 {
1215+ m .NotEqual (namespace .Namespace .Info .State , enumspb .NAMESPACE_STATE_DELETED )
11081216 }
11091217}
11101218
0 commit comments