firebase / firebase/firebase-tools

Firestore emulator Listen remote procedure call response stream is abnormal

Open
#5,207 2 comments 0 reactions 0 assignees View on GitHub
platform: windows type: bug
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

Open the contributing guide

Assessment

This issue has not been assessed yet.

Get new issues in your inbox

A short digest of beginner-friendly GitHub issues.