Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

[ECO-4688] Fix tests #391

Merged
merged 25 commits into from
May 30, 2024
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
25 commits
Select commit Hold shift + click to select a range
8dea861
fixed failing test due to old simplecov dependency
sacOO7 Mar 7, 2024
171075e
Included CI support for ruby 3.2 and 3.3
sacOO7 Apr 22, 2024
e5df18b
Refactored author emails in the gemspec
sacOO7 Apr 22, 2024
f811abb
Updated ably-common git submodules
sacOO7 Apr 23, 2024
e5a8753
updated CI to update SSL certificates to fix openSSL errors
sacOO7 Apr 23, 2024
627e59d
Removed code duplication from ruby encrypt and decrypt string
sacOO7 Apr 29, 2024
218f120
Refactored empty string encryption/decryption test
sacOO7 Apr 29, 2024
a0a3b98
Fixed empty string encryption using openSSL crypto
sacOO7 Apr 29, 2024
46536b1
Added ably em http request as an explicit dependency
sacOO7 Apr 30, 2024
22ed1f3
Disabled bundler cache for ruby
sacOO7 Apr 30, 2024
d93df4f
added bundle install command for parallel_rspec
sacOO7 Apr 30, 2024
2ebc4aa
Revert "added bundle install command for parallel_rspec"
sacOO7 Apr 30, 2024
3d792ec
Fixed ably-em-http-request commit hash
sacOO7 Apr 30, 2024
bcfebff
Added clock skew for renewing token after it expires
sacOO7 May 1, 2024
f26dec9
Added clock skew for flaky unit test
sacOO7 May 1, 2024
754c158
refactored skew ruby constant to clock_skew instead
sacOO7 May 2, 2024
db1ffe9
updated fromSerial param and skipped related test
sacOO7 May 2, 2024
ff686cb
Refactored check.yml, removed unnecessary commands to install ca cert…
sacOO7 May 2, 2024
028a460
Merge branch 'feature/no-connection-serial' into fix/tests
sacOO7 May 16, 2024
505b9e8
Removed unnecessary line from a gemfile that points to a working branch
sacOO7 May 16, 2024
77aefef
fixed indentation/formatting for connection.rb file
sacOO7 May 29, 2024
25d39d3
updated crypto encrypt/decrypt test with proper naming convention
sacOO7 May 29, 2024
510f52d
updated connection spec clock skew as per review comment
sacOO7 May 29, 2024
da38d24
Reverted connection param fromSerial to original from_serial while fe…
sacOO7 May 29, 2024
bf16515
Added comment description for fixed timer related flaky test
sacOO7 May 29, 2024
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 1 addition & 1 deletion .github/workflows/check.yml
Original file line number Diff line number Diff line change
Expand Up @@ -10,7 +10,7 @@ jobs:
strategy:
fail-fast: false
matrix:
ruby: [ '2.7', '3.0', '3.1' ]
ruby: [ '2.7', '3.0', '3.1', '3.2', '3.3' ]
protocol: [ 'json', 'msgpack' ]
type: [ 'unit', 'acceptance' ]
steps:
Expand Down
2 changes: 1 addition & 1 deletion ably.gemspec
Original file line number Diff line number Diff line change
Expand Up @@ -38,7 +38,7 @@ Gem::Specification.new do |spec|
spec.add_development_dependency 'rspec-instafail', '~> 1.0'
spec.add_development_dependency 'bundler', '>= 1.3.0'
spec.add_development_dependency 'webmock', '~> 3.11'
spec.add_development_dependency 'simplecov', '~> 0.21.2'
spec.add_development_dependency 'simplecov', '~> 0.22.0'
spec.add_development_dependency 'simplecov-lcov', '~> 0.8.0'
spec.add_development_dependency 'parallel_tests', '~> 3.8'
spec.add_development_dependency 'pry', '~> 0.14.1'
Expand Down
1 change: 1 addition & 0 deletions lib/ably/realtime/channel.rb
Original file line number Diff line number Diff line change
Expand Up @@ -332,6 +332,7 @@ def presence
# @return [Ably::Util::SafeDeferrable]
#
def history(options = {}, &callback)
# RTL10b
if options.delete(:until_attach)
unless attached?
error = Ably::Exceptions::InvalidRequest.new('option :until_attach is invalid as the channel is not attached' )
Expand Down
28 changes: 14 additions & 14 deletions lib/ably/realtime/connection.rb
Original file line number Diff line number Diff line change
Expand Up @@ -23,26 +23,26 @@ class Connection
# or no host is available. The disconnected state is entered if an established connection is dropped,
# or if a connection attempt was unsuccessful. In the disconnected state the library will periodically
# attempt to open a new connection (approximately every 15 seconds), anticipating that the connection
# will be re-established soon and thus connection and channel continuity will be possible.
# will be re-established soon and thus connection and channel continuity will be possible.
# In this state, developers can continue to publish messages as they are automatically placed
# in a local queue, to be sent as soon as a connection is reestablished. Messages published by
# in a local queue, to be sent as soon as a connection is reestablished. Messages published by
# other clients while this client is disconnected will be delivered to it upon reconnection,
# so long as the connection was resumed within 2 minutes. After 2 minutes have elapsed, recovery
# so long as the connection was resumed within 2 minutes. After 2 minutes have elapsed, recovery
# is no longer possible and the connection will move to the SUSPENDED state.
# SUSPENDED A long term failure condition. No current connection exists because there is no network connectivity
# or no host is available. The suspended state is entered after a failed connection attempt if
# there has then been no connection for a period of two minutes. In the suspended state, the library
# will periodically attempt to open a new connection every 30 seconds. Developers are unable to
# SUSPENDED A long term failure condition. No current connection exists because there is no network connectivity
# or no host is available. The suspended state is entered after a failed connection attempt if
# there has then been no connection for a period of two minutes. In the suspended state, the library
# will periodically attempt to open a new connection every 30 seconds. Developers are unable to
# publish messages in this state. A new connection attempt can also be triggered by an explicit
# call to {Ably::Realtime::Connection#connect}. Once the connection has been re-established,
# channels will be automatically re-attached. The client has been disconnected for too long for them
# to resume from where they left off, so if it wants to catch up on messages published by other clients
# call to {Ably::Realtime::Connection#connect}. Once the connection has been re-established,
# channels will be automatically re-attached. The client has been disconnected for too long for them
# to resume from where they left off, so if it wants to catch up on messages published by other clients
# while it was disconnected, it needs to use the History API.
# CLOSING An explicit request by the developer to close the connection has been sent to the Ably service.
# If a reply is not received from Ably within a short period of time, the connection is forcibly
# CLOSING An explicit request by the developer to close the connection has been sent to the Ably service.
# If a reply is not received from Ably within a short period of time, the connection is forcibly
# terminated and the connection state becomes CLOSED.
# CLOSED The connection has been explicitly closed by the client. In the closed state, no reconnection attempts
# are made automatically by the library, and clients may not publish messages. No connection state is
# CLOSED The connection has been explicitly closed by the client. In the closed state, no reconnection attempts
# are made automatically by the library, and clients may not publish messages. No connection state is
# preserved by the service or by the library. A new connection attempt can be triggered by an explicit
# call to {Ably::Realtime::Connection#connect}, which results in a new connection.
# FAILED This state is entered if the client library encounters a failure condition that it cannot recover from.
Expand Down
4 changes: 2 additions & 2 deletions lib/ably/util/crypto.rb
Original file line number Diff line number Diff line change
Expand Up @@ -83,8 +83,8 @@ def encrypt(payload, encrypt_options = {})
cipher.key = key
iv = encrypt_options[:iv] || fixed_iv || cipher.random_iv
cipher.iv = iv

iv << cipher.update(payload) << cipher.final
iv << cipher.update(payload) unless payload.empty?
iv << cipher.final
end

# Decrypt payload using configured Cipher
Expand Down
2 changes: 1 addition & 1 deletion lib/submodules/ably-common
Submodule ably-common updated 47 files
+19 −0 .editorconfig
+25 −0 .eslintrc.js
+44 −0 .github/workflows/check.yml
+33 −0 .github/workflows/publish-json-schemas.yml
+38 −0 .github/workflows/publish.yml
+4 −0 .gitignore
+9 −0 .markdownlint-cli2.yaml
+2 −0 .tool-versions
+45 −0 CONTRIBUTING.md
+1 −0 COPYRIGHT
+176 −0 LICENSE
+6 −0 MAINTAINERS.md
+34 −0 README.md
+3 −0 go.mod
+110 −0 go/cmd/ablyagent/main.go
+36 −0 json-schemas/README.md
+69 −0 json-schemas/publish.js
+852 −0 json-schemas/src/account-stats.json
+42 −0 json-schemas/src/agents.json
+806 −0 json-schemas/src/app-stats.json
+157 −0 json-schemas/src/attachments.json
+31 −0 json-schemas/src/channel-lifecycle.json
+104 −0 json-schemas/src/client-events-api-requests.json
+207 −0 json-schemas/src/client-events-connections.json
+118 −0 json-schemas/src/epoch.json
+10 −0 json-schemas/versions.json
+29 −0 network/README.md
+1,146 −0 network/aws-edge-locations.json
+8 −0 network/datacenter-locations.csv
+13,015 −0 package-lock.json
+33 −0 package.json
+2 −1 protocol/Gemfile.lock
+158 −1 protocol/README.md
+372 −0 protocol/agents.json
+184 −181 protocol/errors.json
+87 −49 protocol/errorsHelp.json
+33 −0 scripts/build-go.sh
+55 −0 scripts/publish-go.sh
+6 −0 templates/README.md
+20 −0 templates/sdk-contributing.md
+94 −0 templates/sdk-readme.md
+2 −0 test-resources/README.md
+20 −20 test-resources/messages-encoding.json
+75 −0 test-resources/msgpack_test_fixtures.json
+25 −25 test-resources/presence-messages-encoding.json
+21 −5 test-resources/test-app-setup.json
+18 −0 test/agents.test.js
2 changes: 1 addition & 1 deletion spec/acceptance/realtime/channel_history_spec.rb
Original file line number Diff line number Diff line change
Expand Up @@ -194,7 +194,7 @@ def ensure_message_history_direction_and_paging_is_correct(direction)
end
end

it 'updates attach_serial' do
xit 'updates attach_serial' do
lawrence-forooghian marked this conversation as resolved.
Show resolved Hide resolved
rest_channel.publish event, message_before_attach

channel.on(:update) do
Expand Down
5 changes: 3 additions & 2 deletions spec/acceptance/realtime/connection_spec.rb
Original file line number Diff line number Diff line change
Expand Up @@ -102,6 +102,7 @@
end

let(:ttl) { 2 }
let(:clock_skew) { 0.1 } # 0.1 second clock skew

it 'renews token every time after it expires' do
started_at = Time.now.to_f
Expand All @@ -114,8 +115,8 @@
disconnected_times += 1
if disconnected_times == 3
expect(connected_times).to eql(3)
expect(Time.now.to_f - started_at).to be > ttl * 3
expect(Time.now.to_f - started_at).to be < (ttl * 2) * 3
expect((Time.now.to_f - started_at) + clock_skew).to be > ttl * 3
expect((Time.now.to_f - started_at) - clock_skew).to be < (ttl * 2) * 3
stop_reactor
end
end
Expand Down
6 changes: 4 additions & 2 deletions spec/unit/models/token_details_spec.rb
Original file line number Diff line number Diff line change
Expand Up @@ -56,6 +56,7 @@

context '#expired?' do
let(:expire_time) { Time.now + Ably::Models::TokenDetails::TOKEN_EXPIRY_BUFFER }
let(:clock_skew) { 1 } # clock skew of 1 second

context 'once grace period buffer has passed' do
subject { Ably::Models::TokenDetails.new(expires: expire_time - 1) }
Expand All @@ -74,7 +75,7 @@
end

context 'when expires is not available (i.e. string tokens)' do
subject { Ably::Models::TokenDetails.new() }
subject { Ably::Models::TokenDetails.new }

it 'is always false' do
expect(subject.expired?).to eql(false)
Expand All @@ -90,8 +91,9 @@
expect(subject.expired?(from: (Time.now - server_offset_time))).to eql(false)
end

# Test is flaky and fails on CI, so adding a bit of extra tolerance (clock_skew) to make it work
it 'is true' do
expect(subject.expired?(from: Time.now)).to eql(true)
expect(subject.expired?(from: Time.now + clock_skew)).to eql(true)
lawrence-forooghian marked this conversation as resolved.
Show resolved Hide resolved
end
end
end
Expand Down
30 changes: 15 additions & 15 deletions spec/unit/util/crypto_spec.rb
Original file line number Diff line number Diff line change
Expand Up @@ -72,26 +72,26 @@
end
end

context 'encrypts & decrypt' do
context '#encrypt & #decrypt' do
let(:string) { random_str }
let(:byte_array) { random_str.to_msgpack.unpack('C*') }

specify '#encrypt encrypts a string' do
encrypted = subject.encrypt(string)
expect(subject.decrypt(encrypted)).to eql(string)
end
let(:empty_string) { '' }

specify '#decrypt decrypts a string' do
specify 'encrypts and decrypts a non-empty string' do
expect(string).to be_ascii_only
lawrence-forooghian marked this conversation as resolved.
Show resolved Hide resolved
encrypted = subject.encrypt(string)
expect(subject.decrypt(encrypted)).to eql(string)
expect(encrypted).to be_truthy
decrypted = subject.decrypt(encrypted)
expect(decrypted).to eql(string)
expect(decrypted).to be_ascii_only
end
end

context 'encrypting an empty string' do
lawrence-forooghian marked this conversation as resolved.
Show resolved Hide resolved
let(:empty_string) { '' }

it 'raises an ArgumentError' do
expect { subject.encrypt(empty_string) }.to raise_error ArgumentError, /data must not be empty/
specify 'encrypts and decrypts an empty string' do
expect(empty_string).to be_ascii_only
encrypted = subject.encrypt(empty_string)
expect(encrypted).to be_truthy
decrypted = subject.decrypt(encrypted)
expect(decrypted).to eql(empty_string)
expect(decrypted).to be_ascii_only
end
end

Expand Down
Loading