@@ -25,6 +25,7 @@ ABSL_DECLARE_FLAG(float, mem_defrag_threshold);
25
25
ABSL_DECLARE_FLAG (float , mem_defrag_waste_threshold);
26
26
ABSL_DECLARE_FLAG (uint32_t , mem_defrag_check_sec_interval);
27
27
ABSL_DECLARE_FLAG (std::vector<std::string>, rename_command);
28
+ ABSL_DECLARE_FLAG (std::vector<std::string>, command_alias);
28
29
ABSL_DECLARE_FLAG (bool , lua_resp2_legacy_float);
29
30
ABSL_DECLARE_FLAG (double , eviction_memory_budget_threshold);
30
31
@@ -846,4 +847,32 @@ TEST_F(DflyEngineTest, CommandMetricLabels) {
846
847
EXPECT_EQ (metrics.facade_stats .conn_stats .num_conns_other , 0 );
847
848
}
848
849
850
+ class DflyCommandAliasTest : public DflyEngineTest {
851
+ protected:
852
+ DflyCommandAliasTest () {
853
+ // Test an interaction of rename and alias, where we rename and then add an alias on the rename
854
+ absl::SetFlag (&FLAGS_rename_command, {" ping=gnip" });
855
+ absl::SetFlag (&FLAGS_command_alias, {" ___set=set" , " ___ping=gnip" });
856
+ }
857
+
858
+ void TearDown () override {
859
+ absl::SetFlag (&FLAGS_command_alias, {" " });
860
+ absl::SetFlag (&FLAGS_rename_command, {" " });
861
+ DflyEngineTest::TearDown ();
862
+ }
863
+ };
864
+
865
+ TEST_F (DflyCommandAliasTest, Aliasing) {
866
+ EXPECT_EQ (Run ({" SET" , " foo" , " bar" }), " OK" );
867
+ EXPECT_EQ (Run ({" ___SET" , " a" , " b" }), " OK" );
868
+ EXPECT_EQ (Run ({" GET" , " foo" }), " bar" );
869
+ EXPECT_EQ (Run ({" GET" , " a" }), " b" );
870
+ // test the alias
871
+ EXPECT_EQ (Run ({" ___ping" }), " PONG" );
872
+ // test the rename
873
+ EXPECT_EQ (Run ({" gnip" }), " PONG" );
874
+ // the original command is not accessible
875
+ EXPECT_THAT (Run ({" PING" }), ErrArg (" unknown command `PING`" ));
876
+ }
877
+
849
878
} // namespace dfly
0 commit comments