@Override
    public OptionRule optionRule() {
        return OptionRule.builder()
                .required(SUBSCRIPTION_NAME, CLIENT_SERVICE_URL, ADMIN_SERVICE_URL)
                .optional(
                        CURSOR_STARTUP_MODE,
                        CURSOR_STOP_MODE,
                        TOPIC_DISCOVERY_INTERVAL,
                        POLL_TIMEOUT,
                        POLL_INTERVAL,
                        POLL_BATCH_SIZE,
                        TableSchemaOptions.SCHEMA)
                .exclusive(TOPIC, TOPIC_PATTERN)
                .conditional(
                        CURSOR_STARTUP_MODE,
                        SourceProperties.StartMode.TIMESTAMP,
                        CURSOR_STARTUP_TIMESTAMP)
                .conditional(
                        CURSOR_STARTUP_MODE,
                        SourceProperties.StartMode.SUBSCRIPTION,
                        CURSOR_RESET_MODE)
                .conditional(
                        CURSOR_STOP_MODE,
                        SourceProperties.StopMode.TIMESTAMP,
                        CURSOR_STOP_TIMESTAMP)
                .bundled(AUTH_PLUGIN_CLASS, AUTH_PARAMS)
                .build();
    }
@Test
    void optionRule() {
        PulsarSourceFactory pulsarSourceFactory = new PulsarSourceFactory();
        OptionRule optionRule = pulsarSourceFactory.optionRule();
        Assertions.assertNotNull(optionRule);
    }