public Optional<ReadwriteSplittingDataSourceGroupRule> findDataSourceGroupRule(final String dataSourceName) {
        return Optional.ofNullable(dataSourceRuleGroups.get(dataSourceName));
    }
@Test
    void assertCreateReadwriteSplittingRuleWithRowValueExpressionImpl() {
        ReadwriteSplittingDataSourceGroupRuleConfiguration config = new ReadwriteSplittingDataSourceGroupRuleConfiguration(
                "<GROOVY>${['readwrite']}_ds",
                "<GROOVY>${['write']}_ds",
                Arrays.asList("<GROOVY>read_ds_${['0']}", "read_ds_${['1']}", "read_ds_2", "<LITERAL>read_ds_3"),
                "random");
        ReadwriteSplittingRule readwriteSplittingRule = new ReadwriteSplittingRule("logic_db", new ReadwriteSplittingRuleConfiguration(
                Collections.singleton(config), Collections.singletonMap("random", new AlgorithmConfiguration("RANDOM", new Properties()))), mock(ComputeNodeInstanceContext.class));
        Optional<ReadwriteSplittingDataSourceGroupRule> actual = readwriteSplittingRule.findDataSourceGroupRule("readwrite_ds");
        assertTrue(actual.isPresent());
        assertThat(actual.get().getName(), is("readwrite_ds"));
        assertThat(actual.get().getReadwriteSplittingGroup().getWriteDataSource(), is("write_ds"));
        assertThat(actual.get().getReadwriteSplittingGroup().getReadDataSources(), is(Arrays.asList("read_ds_0", "read_ds_1", "read_ds_2", "read_ds_3")));
        assertThat(actual.get().getLoadBalancer().getType(), is("RANDOM"));
    }