Skip to content

Commit c48b285

Browse files
FZambiaclaude
andauthored
Use docker compose for integration tests, add comprehensive test suite (#105)
- Add docker-compose.yml with Centrifugo v6 config (delta, recovery, smallhistory namespaces) - Update CI to use docker compose instead of inline docker run - Add integration tests: recovery, delta compression, presence, history, token auth, RPC, multiple subscriptions - Expose SubscriptionState on abstract Subscription class (was only on SubscriptionImpl) - Add http dev dependency for server API calls in tests - Add "Run tests locally" section to README Co-authored-by: Claude Opus 4.6 <noreply@anthropic.com>
1 parent 96a1bfa commit c48b285

7 files changed

Lines changed: 654 additions & 47 deletions

File tree

.github/workflows/ci.yaml

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -25,7 +25,7 @@ jobs:
2525
- sdk: beta
2626
protobuf: "5.0.0"
2727
- sdk: beta
28-
protobuf: "6.0.0"
28+
protobuf: "6.0.0"
2929
steps:
3030
- uses: actions/checkout@v4
3131

@@ -39,11 +39,11 @@ jobs:
3939
- name: Override protobuf version
4040
run: dart pub add protobuf:${{ matrix.protobuf }}
4141

42-
- name: Install coveralls
43-
run: sudo gem install coveralls-lcov
44-
4542
- name: Start Centrifugo
46-
run: docker run -d -p 8000:8000 -e CENTRIFUGO_CHANNEL_WITHOUT_NAMESPACE_DELTA_PUBLISH=true -e CENTRIFUGO_CHANNEL_WITHOUT_NAMESPACE_ALLOWED_DELTA_TYPES="fossil" -e CENTRIFUGO_CHANNEL_WITHOUT_NAMESPACE_HISTORY_SIZE="100" -e CENTRIFUGO_CHANNEL_WITHOUT_NAMESPACE_HISTORY_TTL="300s" -e CENTRIFUGO_CHANNEL_WITHOUT_NAMESPACE_FORCE_RECOVERY="true" centrifugo/centrifugo:v6 centrifugo --client.insecure
43+
run: docker compose up -d --wait
44+
45+
- name: Run analyzer
46+
run: dart analyze lib/
4747

4848
- name: Run tests
49-
run: bash tool/test.sh
49+
run: dart run test --reporter expanded

README.md

Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -24,6 +24,20 @@ When a mobile application goes to the background there are OS-specific limitatio
2424

2525
See also [PlugFox/spinify](https://github.com/PlugFox/spinify) for an alternative Dart (Flutter) real-time client SDK implementation.
2626

27+
## Run tests locally
28+
29+
Start test Centrifugo server:
30+
31+
```
32+
docker compose up
33+
```
34+
35+
Then run tests:
36+
37+
```
38+
dart run test --reporter expanded
39+
```
40+
2741
## Instructions for maintainers/contributors
2842

2943
### How to update protobuf definitions

docker-compose.yml

Lines changed: 42 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,42 @@
1+
services:
2+
centrifugo:
3+
image: centrifugo/centrifugo:v6
4+
command:
5+
- centrifugo
6+
ports:
7+
- "8000:8000"
8+
environment:
9+
- CENTRIFUGO_CLIENT_INSECURE=true
10+
- CENTRIFUGO_CLIENT_CONCURRENCY=8
11+
- CENTRIFUGO_CLIENT_TOKEN_HMAC_SECRET_KEY=secret
12+
- CENTRIFUGO_LOG_LEVEL=trace
13+
- CENTRIFUGO_HTTP_API_KEY=test-api-key
14+
# Default channel (without namespace).
15+
- CENTRIFUGO_CHANNEL_WITHOUT_NAMESPACE_PRESENCE=true
16+
- CENTRIFUGO_CHANNEL_WITHOUT_NAMESPACE_ALLOWED_DELTA_TYPES=fossil
17+
- CENTRIFUGO_CHANNEL_WITHOUT_NAMESPACE_DELTA_PUBLISH=true
18+
- CENTRIFUGO_CHANNEL_WITHOUT_NAMESPACE_HISTORY_SIZE=100
19+
- CENTRIFUGO_CHANNEL_WITHOUT_NAMESPACE_HISTORY_TTL=300s
20+
- CENTRIFUGO_CHANNEL_WITHOUT_NAMESPACE_FORCE_RECOVERY=true
21+
# Define namespace names (space-separated).
22+
- CENTRIFUGO_CHANNEL_NAMESPACES=delta recovery smallhistory
23+
# delta: stream subscription with fossil delta compression + recovery.
24+
- CENTRIFUGO_CHANNEL_NAMESPACES_DELTA_ALLOWED_DELTA_TYPES=fossil
25+
- CENTRIFUGO_CHANNEL_NAMESPACES_DELTA_DELTA_PUBLISH=true
26+
- CENTRIFUGO_CHANNEL_NAMESPACES_DELTA_FORCE_RECOVERY=true
27+
- CENTRIFUGO_CHANNEL_NAMESPACES_DELTA_HISTORY_SIZE=100
28+
- CENTRIFUGO_CHANNEL_NAMESPACES_DELTA_HISTORY_TTL=300s
29+
- CENTRIFUGO_CHANNEL_NAMESPACES_DELTA_ALLOW_SUBSCRIBE_FOR_CLIENT=true
30+
- CENTRIFUGO_CHANNEL_NAMESPACES_DELTA_ALLOW_PUBLISH_FOR_SUBSCRIBER=true
31+
# recovery: stream subscription with recovery.
32+
- CENTRIFUGO_CHANNEL_NAMESPACES_RECOVERY_FORCE_RECOVERY=true
33+
- CENTRIFUGO_CHANNEL_NAMESPACES_RECOVERY_HISTORY_SIZE=100
34+
- CENTRIFUGO_CHANNEL_NAMESPACES_RECOVERY_HISTORY_TTL=300s
35+
- CENTRIFUGO_CHANNEL_NAMESPACES_RECOVERY_ALLOW_SUBSCRIBE_FOR_CLIENT=true
36+
- CENTRIFUGO_CHANNEL_NAMESPACES_RECOVERY_ALLOW_PUBLISH_FOR_SUBSCRIBER=true
37+
# smallhistory: stream with tiny history for unrecoverable position testing.
38+
- CENTRIFUGO_CHANNEL_NAMESPACES_SMALLHISTORY_FORCE_RECOVERY=true
39+
- CENTRIFUGO_CHANNEL_NAMESPACES_SMALLHISTORY_HISTORY_SIZE=2
40+
- CENTRIFUGO_CHANNEL_NAMESPACES_SMALLHISTORY_HISTORY_TTL=300s
41+
- CENTRIFUGO_CHANNEL_NAMESPACES_SMALLHISTORY_ALLOW_SUBSCRIBE_FOR_CLIENT=true
42+
- CENTRIFUGO_CHANNEL_NAMESPACES_SMALLHISTORY_ALLOW_PUBLISH_FOR_SUBSCRIBER=true

lib/src/subscription.dart

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -17,6 +17,8 @@ enum SubscriptionState { unsubscribed, subscribing, subscribed }
1717
abstract class Subscription {
1818
String get channel;
1919

20+
SubscriptionState get state;
21+
2022
Stream<SubscribingEvent> get subscribing;
2123
Stream<SubscribedEvent> get subscribed;
2224
Stream<UnsubscribedEvent> get unsubscribed;
@@ -68,6 +70,7 @@ class SubscriptionImpl implements Subscription {
6870
}
6971
}
7072

73+
@override
7174
var state = SubscriptionState.unsubscribed;
7275

7376
@override

pubspec.yaml

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -18,5 +18,6 @@ dependencies:
1818

1919
dev_dependencies:
2020
build_runner: ^2.0.3
21+
http: ^1.1.0
2122
mockito: ^5.0.7
2223
test: ^1.17.4

0 commit comments

Comments
 (0)