-
Notifications
You must be signed in to change notification settings - Fork 3.9k
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
Introduces test matrix based on Redis versions [8.0-M1, 7.4.1, 7.2.6, 6.2.16] #4015
base: master
Are you sure you want to change the base?
Conversation
eb4bb8c
to
68c372a
Compare
… 6.2.16] Use docker composer to bring up the test env using `redislabs/client-libs-test` image. When run against older Redis version some tests are using commands available only in newer Redis server versions. To resolve this we are introducing two new annotations/rules - Introduce `SinceRedisVersion` annotation/Rule - for conditionally running tests based on Redis server version contacted - Introduce `EnableOnCommad` annotation/Rule - for conditionally running tests based on command availability on the server And mark respective tests with the least Redis Version required by the test - SinceRedisVersion ("7.4.0") - Mark tests using commands/modifiers introduced with Redis 7.4.0 - SinceRedisVersion ("7.2.0") - Mark tests using commands/modifiers introduced with Redis 7.2.0 - SinceRedisVersion ("7.0.0") - Mark tests using commands/modifiers introduced with Redis 7.0.0 The same approach used to mark CSC tests - Disabled client-side caching tests for versions below 7.4 Fix in Jedis Client against Redis server 6.x - Fix NPW on CommandInfo - some of the array elements returned are available based from given RedisServer aclCategories (as of Redis 6.0) , tips , (as of Redis 7.0) subcommands - Fix NPE AccessControlLogEntry when used against Redis 6 Starting with Redis version 7.2.0: Added entry ID, timestamp created, and timestamp last updated fields. Fix Test failures against 6.x - Fix JedisPooledClientSideCacheTest - Fix AccessControlListCommandsTest.aclLogTest:372 » NullPointer - Fix AccessControlListCommandsTest.aclLogWithEntryID:473 » NullPointer - Fix StreamsCommandsTest - Fix StreamsPipelineCommandsTest xadd - Starting with Redis version 7.0.0: Added support for the <ms>-* explicit ID form. - Test env migrated to use native Redis server TLS instead of using stunnel Not all tests were migrated - Disable Modules test in containerized test env ModuleTest uses custom test module to test load/unload/sendCommand. Requires pre-build test module on the same os like test container to avoid errors - Disable UDS tests in containerized test env No easy way to make unix sockets work on MAC with docker
java.lang.AssertionError: Expected :[(2.1909382939338684,41.433790281840835), (2.187376320362091,41.40634178640635)] Actual :[(2.1909382939338684,41.43379028184083), (2.187376320362091,41.40634178640635)] Compare with tolerance to avoid error on returned precision on mac
68c372a
to
0aa9343
Compare
77f7e4e
to
a691416
Compare
Adding ignored unit test for repro
@@ -27,7 +29,7 @@ public class SSLJedisClusterTest extends JedisClusterTestBase { | |||
int port = hostAndPort.getPort(); | |||
if (host.equals("127.0.0.1")) { | |||
host = "localhost"; | |||
port = port + 1000; | |||
//port = port + 1000; |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Is this a leftover?
@@ -37,61 +39,90 @@ public class SSLJedisClusterTest extends JedisClusterTestBase { | |||
if ("localhost".equals(hostAndPort.getHost())) { | |||
return hostAndPort; | |||
} | |||
return new HostAndPort(hostAndPort.getHost(), hostAndPort.getPort() + 1000); | |||
//return new HostAndPort(hostAndPort.getHost(), hostAndPort.getPort() + 1000); |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
...and this?
@@ -19,7 +23,8 @@ public class SSLJedisSentinelPoolTest { | |||
|
|||
@BeforeClass | |||
public static void prepare() { | |||
SSLJedisTest.setupTrustStore(); | |||
TlsUtil.createAndSaveEnvTruststore("redis9-sentinel", "changeit"); | |||
//TlsUtil.setJvmTrustStore(envTruststore("redis9-sentinel")); |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
... and this? :)
@@ -0,0 +1,128 @@ | |||
--- | |||
|
|||
name: Build and Test using containerized environment |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Would we keep both workflows (the old one and this one)?
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
This was the initial idea. However, this will require extra effort since the current approach for setting up infra for the tests uses stunnel
with TLS termination causing some SSL-related cluster tests to fail ( Redis server port announce non-tls port and hence the above mappers used to change the port).
I see three options here:
-
keep only the containerized setup
-
update the current infra to use the Redis Server with native TLS port,
-
or revisit the failing SSL and rewrite them to support both modes.
Will ping @sazzad16 and choose which path to update the review..
LGTM, the code looks much neater this way! |
We use docker composer to bring up the test env using
redislabs/client-libs-test
image.Example command to bring up test env for dev/test
- NOTE : 6.2.16 uses a dedicated .env.v6.12.16 file, since some of the redis configuration settings are not supported in 6.2.16
docker compose --env-file src/test/resources/env/.env.v6.12.16 -f src/test/resources/env/docker-compose.yml up
Introduces test matrix based on Redis versions [8.0-M1, 7.4.1, 7.2.6, 6.2.16]
When run against older Redis version it appears that some tests are using commands available only in newer Redis server versions. To resolve this we are introducing two new annotations/rules
SinceRedisVersion
annotation/Rule - for conditionally running tests based on Redis server version contactedEnableOnCommad
annotation/Rule - for conditionally running tests based on command availability on the serverAnd mark respective tests with the least Redis Version required by the test
The same approach used to mark CSC tests
Fix in Jedis Client (Redis 6.x)
Fix NPE on CommandInfo - some of the array elements returned are available since ( Redis server 6.0/7.0)
(see NPE thrown when invoking Jedis#commandInfo against Redis server 6.2.16 #4017 )
Fix NPE when reading AccessControlLogEntry
(see NPE thrown on jedis.aclLog() used against Redis server 7.2.0< #4016)
Fixed Test failures against 6.x
- Test env migrated to use native Redis server TLS instead of using stunnel
The primary reason for those failures is the Redis server 6.2.16 is returning the non-TLS port in the CLUSTER SLOTS command in contrast to Redis Server 7.2.0+. I suggest reviewing & addressing Cluster SSL related test failures with follow-up PR.
Ignored tests during migration
Disabled ModuleTest in containerized test env.
ModuleTest uses a custom test module to test load/unload/sendCommand. Requires pre-build test module on the same os like test container to avoid errors
Disable UDS tests in containerized test env
No easy way to make unix sockets work on MAC with docker
Closes #4016, Closes #4017