firebase / firebase/firebase-tools
Firestore emulator Listen remote procedure call response stream is abnormal
- Dominant language
- TypeScript
- Stars
- 4.5k
- Forks
- 1.3k
- Avg merge
- 1d 12h
- Merged PRs (30d)
- 84
Description
### [REQUIRED] Environment info
**firebase-tools:**
My Firebase CLI version is: `11.16.0`
**Platform:**
My platform is Windows 11
### [REQUIRED] Test case
```
ResponseStream listenQuery() {
ChannelOptions options = const ChannelOptions(credentials: ChannelCredentials.insecure());
FirestoreClient client =
FirestoreClient(ClientChannel("localhost", port: 8080, options: options));
ListenRequest listenRequest = ListenRequest(
database: "projects/myProject/databases/(default)",
addTarget: Target(
targetId: 12,
once: false,
query: Target_QueryTarget(
parent: "projects/myProject/databases/(default)/documents",
structuredQuery: StructuredQuery(
// select: StructuredQuery_Projection(),
from: [StructuredQuery_CollectionSelector(collectionId: "users")]))),
);
var streamController = StreamController();
streamController.onListen = () {
streamController.add(listenRequest);
};
ResponseStream responseStream = client.listen(streamController.stream,
options: CallOptions(metadata: {
//https://github.com/grpc/grpc-dart/issues/215#issuecomment-510081112
'google-cloud-resource-prefix': "projects/myProject/databases/(default)"
}));
return responseStream;
}
Future main() async {
await for (var a in listenQuery()) {
print(a);
}
}
```
### [REQUIRED] Steps to reproduce
1. I send a request to grpc [Listen](https://firebase.google.com/docs/firestore/reference/rpc/google.firestore.v1beta1#google.firestore.v1beta1.Firestore.Listen)
2. I listen the response stream for changes.
### [REQUIRED] Expected behavior
The expected response stream is:
1. TargetChange -> ADD
2. document_change 1
3. document_change 2
4. document_change n
5. TargetChange -> CURRENT
6. TargetChange ->NO_CHANGE
And after a document add:
7. documentChange
### [REQUIRED] Actual behavior
The actual response stream is:
1. TargetChange -> ADD
2. document_change 1
3. document_change 2
4. document_change n
5. TargetChange -> CURRENT
6. TargetChange ->NO_CHANGE
And after a document add:
7. TargetChange -> RESET
8. document_change 1
9. document_change 2
10. document_change n
11. TargetChange -> CURRENT
12. TargetChange ->NO_CHANGE
Contributor guide
Assessment
This issue has not been assessed yet.