diff --git a/metadata/index.json b/metadata/index.json index 66e18d11..0421e460 100644 --- a/metadata/index.json +++ b/metadata/index.json @@ -155,6 +155,10 @@ "allowed-packages" : [ "org.apache.activemq" ], "directory" : "org.apache.activemq/artemis-jms-client", "module" : "org.apache.activemq:artemis-jms-client" +}, { + "allowed-packages" : [ "org.apache.shardingsphere.elasticjob" ], + "directory" : "org.apache.shardingsphere.elasticjob/elasticjob-lite-core", + "module" : "org.apache.shardingsphere.elasticjob:elasticjob-lite-core" }, { "allowed-packages" : [ "org.apache.commons" ], "directory" : "org.apache.commons/commons-compress", diff --git a/metadata/org.apache.shardingsphere.elasticjob/elasticjob-lite-core/3.0.3/index.json b/metadata/org.apache.shardingsphere.elasticjob/elasticjob-lite-core/3.0.3/index.json new file mode 100644 index 00000000..11ac50cc --- /dev/null +++ b/metadata/org.apache.shardingsphere.elasticjob/elasticjob-lite-core/3.0.3/index.json @@ -0,0 +1,4 @@ +[ + "reflect-config.json", + "resource-config.json" +] diff --git a/metadata/org.apache.shardingsphere.elasticjob/elasticjob-lite-core/3.0.3/reflect-config.json b/metadata/org.apache.shardingsphere.elasticjob/elasticjob-lite-core/3.0.3/reflect-config.json new file mode 100644 index 00000000..5c369d2a --- /dev/null +++ b/metadata/org.apache.shardingsphere.elasticjob/elasticjob-lite-core/3.0.3/reflect-config.json @@ -0,0 +1,154 @@ +[ +{ + "condition":{"typeReachable":"org.apache.shardingsphere.elasticjob.executor.ElasticJobExecutor"}, + "name":"java.util.Properties", + "methods":[{"name":"","parameterTypes":[] }] +}, +{ + "condition":{"typeReachable":"org.apache.shardingsphere.elasticjob.lite.api.bootstrap.impl.ScheduleJobBootstrap"}, + "name":"java.util.Properties", + "methods":[{"name":"","parameterTypes":[] }] +}, +{ + "condition":{"typeReachable":"org.apache.shardingsphere.elasticjob.lite.internal.failover.FailoverListenerManager"}, + "name":"java.util.Properties", + "methods":[{"name":"","parameterTypes":[] }] +}, +{ + "condition":{"typeReachable":"org.apache.shardingsphere.elasticjob.lite.internal.reconcile.ReconcileService"}, + "name":"java.util.Properties", + "methods":[{"name":"","parameterTypes":[] }] +}, +{ + "condition":{"typeReachable":"org.apache.shardingsphere.elasticjob.lite.internal.sharding.ShardingListenerManager$ListenServersChangedJobListener"}, + "name":"java.util.Properties", + "methods":[{"name":"","parameterTypes":[] }] +}, +{ + "condition":{"typeReachable":"org.apache.shardingsphere.elasticjob.lite.internal.sharding.ShardingListenerManager$ShardingTotalCountChangedJobListener"}, + "name":"java.util.Properties", + "methods":[{"name":"","parameterTypes":[] }] +}, +{ + "condition":{"typeReachable":"org.apache.shardingsphere.elasticjob.lite.api.bootstrap.impl.OneOffJobBootstrap"}, + "name":"org.apache.shardingsphere.elasticjob.infra.handler.sharding.JobInstance", + "queryAllPublicMethods":true +}, +{ + "condition":{"typeReachable":"org.apache.shardingsphere.elasticjob.lite.api.bootstrap.impl.ScheduleJobBootstrap"}, + "name":"org.apache.shardingsphere.elasticjob.infra.handler.sharding.JobInstance", + "queryAllPublicMethods":true +}, +{ + "condition":{"typeReachable":"org.apache.shardingsphere.elasticjob.lite.internal.instance.InstanceNode"}, + "name":"org.apache.shardingsphere.elasticjob.infra.handler.sharding.JobInstance", + "allDeclaredFields":true, + "methods":[{"name":"getJobInstanceId","parameterTypes":[] }, {"name":"getLabels","parameterTypes":[] }, {"name":"getServerIp","parameterTypes":[] }] +}, +{ + "condition":{"typeReachable":"org.apache.shardingsphere.elasticjob.lite.internal.instance.InstanceService"}, + "name":"org.apache.shardingsphere.elasticjob.infra.handler.sharding.JobInstance" +}, +{ + "condition":{"typeReachable":"org.apache.shardingsphere.elasticjob.lite.internal.schedule.JobScheduler"}, + "name":"org.apache.shardingsphere.elasticjob.infra.handler.sharding.JobInstance", + "queryAllPublicMethods":true +}, +{ + "condition":{"typeReachable":"org.apache.shardingsphere.elasticjob.lite.internal.setup.SetUpFacade"}, + "name":"org.apache.shardingsphere.elasticjob.infra.handler.sharding.JobInstance" +}, +{ + "condition":{"typeReachable":"org.apache.shardingsphere.elasticjob.lite.api.bootstrap.impl.ScheduleJobBootstrap"}, + "name":"org.apache.shardingsphere.elasticjob.infra.handler.sharding.JobInstanceBeanInfo" +}, +{ + "condition":{"typeReachable":"org.apache.shardingsphere.elasticjob.lite.api.bootstrap.impl.ScheduleJobBootstrap"}, + "name":"org.apache.shardingsphere.elasticjob.infra.handler.sharding.JobInstanceCustomizer" +}, +{ + "condition":{"typeReachable":"org.apache.shardingsphere.elasticjob.executor.ElasticJobExecutor"}, + "name":"org.apache.shardingsphere.elasticjob.infra.pojo.JobConfigurationPOJO", + "methods":[{"name":"setCron","parameterTypes":["java.lang.String"] }, {"name":"setProps","parameterTypes":["java.util.Properties"] }] +}, +{ + "condition":{"typeReachable":"org.apache.shardingsphere.elasticjob.infra.yaml.YamlEngine"}, + "name":"org.apache.shardingsphere.elasticjob.infra.pojo.JobConfigurationPOJO", + "allDeclaredFields":true, + "methods":[{"name":"","parameterTypes":[] }, {"name":"setDescription","parameterTypes":["java.lang.String"] }, {"name":"setDisabled","parameterTypes":["boolean"] }, {"name":"setFailover","parameterTypes":["boolean"] }, {"name":"setJobName","parameterTypes":["java.lang.String"] }, {"name":"setJobParameter","parameterTypes":["java.lang.String"] }, {"name":"setMaxTimeDiffSeconds","parameterTypes":["int"] }, {"name":"setMisfire","parameterTypes":["boolean"] }, {"name":"setMonitorExecution","parameterTypes":["boolean"] }, {"name":"setOverwrite","parameterTypes":["boolean"] }, {"name":"setReconcileIntervalMinutes","parameterTypes":["int"] }, {"name":"setShardingItemParameters","parameterTypes":["java.lang.String"] }, {"name":"setShardingTotalCount","parameterTypes":["int"] }, {"name":"setStaticSharding","parameterTypes":["boolean"] }] +}, +{ + "condition":{"typeReachable":"org.apache.shardingsphere.elasticjob.lite.api.bootstrap.impl.OneOffJobBootstrap"}, + "name":"org.apache.shardingsphere.elasticjob.infra.pojo.JobConfigurationPOJO", + "queryAllPublicMethods":true +}, +{ + "condition":{"typeReachable":"org.apache.shardingsphere.elasticjob.lite.api.bootstrap.impl.ScheduleJobBootstrap"}, + "name":"org.apache.shardingsphere.elasticjob.infra.pojo.JobConfigurationPOJO", + "queryAllPublicMethods":true, + "methods":[{"name":"setCron","parameterTypes":["java.lang.String"] }, {"name":"setProps","parameterTypes":["java.util.Properties"] }] +}, +{ + "condition":{"typeReachable":"org.apache.shardingsphere.elasticjob.lite.internal.config.ConfigurationService"}, + "name":"org.apache.shardingsphere.elasticjob.infra.pojo.JobConfigurationPOJO", + "allDeclaredFields":true, + "methods":[{"name":"getCron","parameterTypes":[] }, {"name":"getDescription","parameterTypes":[] }, {"name":"getJobErrorHandlerType","parameterTypes":[] }, {"name":"getJobExecutorServiceHandlerType","parameterTypes":[] }, {"name":"getJobExtraConfigurations","parameterTypes":[] }, {"name":"getJobListenerTypes","parameterTypes":[] }, {"name":"getJobName","parameterTypes":[] }, {"name":"getJobParameter","parameterTypes":[] }, {"name":"getJobShardingStrategyType","parameterTypes":[] }, {"name":"getLabel","parameterTypes":[] }, {"name":"getMaxTimeDiffSeconds","parameterTypes":[] }, {"name":"getProps","parameterTypes":[] }, {"name":"getReconcileIntervalMinutes","parameterTypes":[] }, {"name":"getShardingItemParameters","parameterTypes":[] }, {"name":"getShardingTotalCount","parameterTypes":[] }, {"name":"getTimeZone","parameterTypes":[] }, {"name":"isDisabled","parameterTypes":[] }, {"name":"isFailover","parameterTypes":[] }, {"name":"isMisfire","parameterTypes":[] }, {"name":"isMonitorExecution","parameterTypes":[] }, {"name":"isOverwrite","parameterTypes":[] }, {"name":"isStaticSharding","parameterTypes":[] }] +}, +{ + "condition":{"typeReachable":"org.apache.shardingsphere.elasticjob.lite.internal.failover.FailoverListenerManager"}, + "name":"org.apache.shardingsphere.elasticjob.infra.pojo.JobConfigurationPOJO", + "methods":[{"name":"setCron","parameterTypes":["java.lang.String"] }, {"name":"setProps","parameterTypes":["java.util.Properties"] }] +}, +{ + "condition":{"typeReachable":"org.apache.shardingsphere.elasticjob.lite.internal.reconcile.ReconcileService"}, + "name":"org.apache.shardingsphere.elasticjob.infra.pojo.JobConfigurationPOJO", + "methods":[{"name":"setCron","parameterTypes":["java.lang.String"] }, {"name":"setProps","parameterTypes":["java.util.Properties"] }] +}, +{ + "condition":{"typeReachable":"org.apache.shardingsphere.elasticjob.lite.internal.schedule.JobScheduler"}, + "name":"org.apache.shardingsphere.elasticjob.infra.pojo.JobConfigurationPOJO", + "queryAllPublicMethods":true +}, +{ + "condition":{"typeReachable":"org.apache.shardingsphere.elasticjob.lite.internal.sharding.ShardingListenerManager$ListenServersChangedJobListener"}, + "name":"org.apache.shardingsphere.elasticjob.infra.pojo.JobConfigurationPOJO", + "methods":[{"name":"setCron","parameterTypes":["java.lang.String"] }, {"name":"setProps","parameterTypes":["java.util.Properties"] }] +}, +{ + "condition":{"typeReachable":"org.apache.shardingsphere.elasticjob.lite.internal.sharding.ShardingListenerManager$ShardingTotalCountChangedJobListener"}, + "name":"org.apache.shardingsphere.elasticjob.infra.pojo.JobConfigurationPOJO", + "methods":[{"name":"setCron","parameterTypes":["java.lang.String"] }, {"name":"setProps","parameterTypes":["java.util.Properties"] }] +}, +{ + "condition":{"typeReachable":"org.apache.shardingsphere.elasticjob.lite.api.bootstrap.impl.ScheduleJobBootstrap"}, + "name":"org.apache.shardingsphere.elasticjob.infra.pojo.JobConfigurationPOJOBeanInfo" +}, +{ + "condition":{"typeReachable":"org.apache.shardingsphere.elasticjob.lite.api.bootstrap.impl.ScheduleJobBootstrap"}, + "name":"org.apache.shardingsphere.elasticjob.infra.pojo.JobConfigurationPOJOCustomizer" +}, +{ + "condition":{"typeReachable":"org.apache.shardingsphere.elasticjob.lite.api.bootstrap.impl.OneOffJobBootstrap"}, + "name":"org.apache.shardingsphere.elasticjob.lite.internal.schedule.JobShutdownHookPlugin", + "queryAllPublicMethods":true +}, +{ + "condition":{"typeReachable":"org.apache.shardingsphere.elasticjob.lite.api.bootstrap.impl.ScheduleJobBootstrap"}, + "name":"org.apache.shardingsphere.elasticjob.lite.internal.schedule.JobShutdownHookPlugin", + "queryAllPublicMethods":true +}, +{ + "condition":{"typeReachable":"org.apache.shardingsphere.elasticjob.lite.internal.schedule.JobScheduler"}, + "name":"org.apache.shardingsphere.elasticjob.lite.internal.schedule.JobShutdownHookPlugin", + "queryAllPublicMethods":true, + "methods":[{"name":"","parameterTypes":[] }, {"name":"setCleanShutdown","parameterTypes":["boolean"] }] +}, +{ + "condition":{"typeReachable":"org.apache.shardingsphere.elasticjob.lite.api.bootstrap.impl.ScheduleJobBootstrap"}, + "name":"org.apache.shardingsphere.elasticjob.lite.internal.schedule.JobShutdownHookPluginBeanInfo" +}, +{ + "condition":{"typeReachable":"org.apache.shardingsphere.elasticjob.lite.api.bootstrap.impl.ScheduleJobBootstrap"}, + "name":"org.apache.shardingsphere.elasticjob.lite.internal.schedule.JobShutdownHookPluginCustomizer" +} +] diff --git a/metadata/org.apache.shardingsphere.elasticjob/elasticjob-lite-core/3.0.3/resource-config.json b/metadata/org.apache.shardingsphere.elasticjob/elasticjob-lite-core/3.0.3/resource-config.json new file mode 100644 index 00000000..a453a0b8 --- /dev/null +++ b/metadata/org.apache.shardingsphere.elasticjob/elasticjob-lite-core/3.0.3/resource-config.json @@ -0,0 +1,32 @@ +{ + "resources":{ + "includes":[{ + "condition":{"typeReachable":"org.apache.shardingsphere.elasticjob.lite.internal.schedule.JobScheduler"}, + "pattern":"\\QMETA-INF/services/org.apache.shardingsphere.elasticjob.error.handler.JobErrorHandlerPropertiesValidator\\E" + }, { + "condition":{"typeReachable":"org.apache.shardingsphere.elasticjob.error.handler.JobErrorHandlerFactory"}, + "pattern":"\\QMETA-INF/services/org.apache.shardingsphere.elasticjob.error.handler.JobErrorHandler\\E" + }, { + "condition":{"typeReachable":"org.apache.shardingsphere.elasticjob.executor.item.JobItemExecutorFactory"}, + "pattern":"\\QMETA-INF/services/org.apache.shardingsphere.elasticjob.executor.item.impl.ClassedJobItemExecutor\\E" + }, { + "condition":{"typeReachable":"org.apache.shardingsphere.elasticjob.executor.item.JobItemExecutorFactory"}, + "pattern":"\\QMETA-INF/services/org.apache.shardingsphere.elasticjob.executor.item.impl.TypedJobItemExecutor\\E" + }, { + "condition":{"typeReachable":"org.apache.shardingsphere.elasticjob.executor.context.ExecutorContext"}, + "pattern":"\\QMETA-INF/services/org.apache.shardingsphere.elasticjob.infra.context.Reloadable\\E" + }, { + "condition":{"typeReachable":"org.apache.shardingsphere.elasticjob.infra.handler.threadpool.JobExecutorServiceHandlerFactory"}, + "pattern":"\\QMETA-INF/services/org.apache.shardingsphere.elasticjob.infra.handler.threadpool.JobExecutorServiceHandler\\E" + }, { + "condition":{"typeReachable":"org.apache.shardingsphere.elasticjob.lite.internal.setup.JobClassNameProviderFactory"}, + "pattern":"\\QMETA-INF/services/org.apache.shardingsphere.elasticjob.lite.internal.setup.JobClassNameProvider\\E" + }, { + "condition":{"typeReachable":"org.apache.shardingsphere.elasticjob.reg.exception.RegExceptionHandler"}, + "pattern":"\\QMETA-INF/services/org.apache.shardingsphere.elasticjob.reg.exception.IgnoredExceptionProvider\\E" + }, { + "condition":{"typeReachable":"org.apache.shardingsphere.elasticjob.lite.api.bootstrap.impl.ScheduleJobBootstrap"}, + "pattern":"\\Qorg/quartz/core/quartz-build.properties\\E" + }]}, + "bundles":[] +} diff --git a/metadata/org.apache.shardingsphere.elasticjob/elasticjob-lite-core/index.json b/metadata/org.apache.shardingsphere.elasticjob/elasticjob-lite-core/index.json new file mode 100644 index 00000000..66f81f54 --- /dev/null +++ b/metadata/org.apache.shardingsphere.elasticjob/elasticjob-lite-core/index.json @@ -0,0 +1,10 @@ +[ + { + "latest": true, + "metadata-version": "3.0.3", + "module": "org.apache.shardingsphere.elasticjob:elasticjob-lite-core", + "tested-versions": [ + "3.0.3" + ] + } +] diff --git a/tests/src/index.json b/tests/src/index.json index b0e687e5..3212fa91 100644 --- a/tests/src/index.json +++ b/tests/src/index.json @@ -238,6 +238,12 @@ "name" : "org.apache.activemq:artemis-jms-client", "versions" : [ "2.28.0" ] } ] +}, { + "test-project-path" : "org.apache.shardingsphere.elasticjob/elasticjob-lite-core/3.0.3", + "libraries" : [ { + "name" : "org.apache.shardingsphere.elasticjob:elasticjob-lite-core", + "versions" : [ "3.0.3" ] + } ] }, { "test-project-path" : "org.apache.commons/commons-compress/1.23.0", "libraries" : [ { diff --git a/tests/src/org.apache.shardingsphere.elasticjob/elasticjob-lite-core/3.0.3/.gitignore b/tests/src/org.apache.shardingsphere.elasticjob/elasticjob-lite-core/3.0.3/.gitignore new file mode 100644 index 00000000..c98c7875 --- /dev/null +++ b/tests/src/org.apache.shardingsphere.elasticjob/elasticjob-lite-core/3.0.3/.gitignore @@ -0,0 +1,4 @@ +gradlew.bat +gradlew +gradle/ +build/ diff --git a/tests/src/org.apache.shardingsphere.elasticjob/elasticjob-lite-core/3.0.3/build.gradle b/tests/src/org.apache.shardingsphere.elasticjob/elasticjob-lite-core/3.0.3/build.gradle new file mode 100644 index 00000000..afab8820 --- /dev/null +++ b/tests/src/org.apache.shardingsphere.elasticjob/elasticjob-lite-core/3.0.3/build.gradle @@ -0,0 +1,20 @@ +/* + * Copyright and related rights waived via CC0 + * + * You should have received a copy of the CC0 legalcode along with this + * work. If not, see . + */ + +plugins { + id "org.graalvm.internal.tck" +} + +String libraryVersion = tck.testedLibraryVersion.get() + +dependencies { + testImplementation "org.apache.shardingsphere.elasticjob:elasticjob-lite-core:$libraryVersion" + testImplementation 'org.assertj:assertj-core:3.22.0' + testImplementation 'org.awaitility:awaitility:4.2.0' + testImplementation 'org.apache.curator:curator-test:5.5.0' + testImplementation 'org.apache.zookeeper:zookeeper:3.9.0' +} diff --git a/tests/src/org.apache.shardingsphere.elasticjob/elasticjob-lite-core/3.0.3/gradle.properties b/tests/src/org.apache.shardingsphere.elasticjob/elasticjob-lite-core/3.0.3/gradle.properties new file mode 100644 index 00000000..eed6b2c9 --- /dev/null +++ b/tests/src/org.apache.shardingsphere.elasticjob/elasticjob-lite-core/3.0.3/gradle.properties @@ -0,0 +1,2 @@ +library.version = 3.0.3 +metadata.dir = org.apache.shardingsphere.elasticjob/elasticjob-lite-core/3.0.3/ diff --git a/tests/src/org.apache.shardingsphere.elasticjob/elasticjob-lite-core/3.0.3/settings.gradle b/tests/src/org.apache.shardingsphere.elasticjob/elasticjob-lite-core/3.0.3/settings.gradle new file mode 100644 index 00000000..e6e07673 --- /dev/null +++ b/tests/src/org.apache.shardingsphere.elasticjob/elasticjob-lite-core/3.0.3/settings.gradle @@ -0,0 +1,13 @@ +pluginManagement { + def tckPath = Objects.requireNonNullElse( + System.getenv("GVM_TCK_TCKDIR"), + "../../../../tck-build-logic" + ) + includeBuild(tckPath) +} + +plugins { + id "org.graalvm.internal.tck-settings" version "1.0.0-SNAPSHOT" +} + +rootProject.name = 'org.apache.shardingsphere.elasticjob.elasticjob-lite-core_tests' diff --git a/tests/src/org.apache.shardingsphere.elasticjob/elasticjob-lite-core/3.0.3/src/test/java/org_apache_shardingsphere_elasticjob/elasticjob_lite_core/ElasticjobLiteCoreTest.java b/tests/src/org.apache.shardingsphere.elasticjob/elasticjob-lite-core/3.0.3/src/test/java/org_apache_shardingsphere_elasticjob/elasticjob_lite_core/ElasticjobLiteCoreTest.java new file mode 100644 index 00000000..77772043 --- /dev/null +++ b/tests/src/org.apache.shardingsphere.elasticjob/elasticjob-lite-core/3.0.3/src/test/java/org_apache_shardingsphere_elasticjob/elasticjob_lite_core/ElasticjobLiteCoreTest.java @@ -0,0 +1,150 @@ +/* + * Copyright and related rights waived via CC0 + * + * You should have received a copy of the CC0 legalcode along with this + * work. If not, see . + */ +package org_apache_shardingsphere_elasticjob.elasticjob_lite_core; + +import org.apache.curator.CuratorZookeeperClient; +import org.apache.curator.retry.ExponentialBackoffRetry; +import org.apache.curator.test.TestingServer; +import org.apache.shardingsphere.elasticjob.api.JobConfiguration; +import org.apache.shardingsphere.elasticjob.api.ShardingContext; +import org.apache.shardingsphere.elasticjob.dataflow.job.DataflowJob; +import org.apache.shardingsphere.elasticjob.dataflow.props.DataflowJobProperties; +import org.apache.shardingsphere.elasticjob.http.props.HttpJobProperties; +import org.apache.shardingsphere.elasticjob.lite.api.bootstrap.impl.OneOffJobBootstrap; +import org.apache.shardingsphere.elasticjob.lite.api.bootstrap.impl.ScheduleJobBootstrap; +import org.apache.shardingsphere.elasticjob.reg.base.CoordinatorRegistryCenter; +import org.apache.shardingsphere.elasticjob.reg.zookeeper.ZookeeperConfiguration; +import org.apache.shardingsphere.elasticjob.reg.zookeeper.ZookeeperRegistryCenter; +import org.apache.shardingsphere.elasticjob.simple.job.SimpleJob; +import org.awaitility.Awaitility; +import org.junit.jupiter.api.AfterAll; +import org.junit.jupiter.api.BeforeAll; +import org.junit.jupiter.api.Test; +import org_apache_shardingsphere_elasticjob.elasticjob_lite_core.entity.TOrderPOJO; +import org_apache_shardingsphere_elasticjob.elasticjob_lite_core.repository.VirtualTOrderRepository; + +import java.io.IOException; +import java.time.Duration; +import java.util.List; + +import static org.assertj.core.api.Assertions.assertThat; +import static org.junit.jupiter.api.Assertions.assertDoesNotThrow; +import static org.junit.jupiter.api.Assertions.assertTrue; + +class ElasticjobLiteCoreTest { + private static final int PORT = 6891; + + private static final VirtualTOrderRepository VIRTUAL_T_ORDER_REPOSITORY = new VirtualTOrderRepository(); + + private static volatile TestingServer testingServer; + + private static CoordinatorRegistryCenter registryCenter; + + + @BeforeAll + static void beforeAll() throws Exception { + testingServer = new TestingServer(PORT, true); + try (CuratorZookeeperClient client = new CuratorZookeeperClient(testingServer.getConnectString(), + 60 * 1000, 500, null, + new ExponentialBackoffRetry(500, 3, 500 * 3))) { + client.start(); + Awaitility.await() + .atMost(Duration.ofMillis(500 * 60)) + .untilAsserted(() -> assertTrue(client.isConnected())); + } catch (Exception e) { + throw new RuntimeException(e); + } + registryCenter = new ZookeeperRegistryCenter(new ZookeeperConfiguration(testingServer.getConnectString(), "elasticjob-lite-core-java-test")); + registryCenter.init(); + } + + @AfterAll + static void afterAll() throws IOException { + registryCenter.close(); + testingServer.close(); + } + + @Test + void testJavaHttpJob() { + ScheduleJobBootstrap jobBootstrap = new ScheduleJobBootstrap(registryCenter, "HTTP", + JobConfiguration.newBuilder("testJavaHttpJob", 3) + .setProperty(HttpJobProperties.URI_KEY, "https://google.com") + .setProperty(HttpJobProperties.METHOD_KEY, "GET") + .cron("0/5 * * * * ?") + .shardingItemParameters("0=Norddorf,1=Bordeaux,2=Somerset") + .build() + ); + assertDoesNotThrow(() -> { + jobBootstrap.schedule(); + jobBootstrap.shutdown(); + }); + } + + @Test + void testJavaSimpleJob() { + ScheduleJobBootstrap jobBootstrap = new ScheduleJobBootstrap(registryCenter, + (SimpleJob) shardingContext -> { + assertThat(shardingContext.getShardingItem()).isEqualTo(3); + VIRTUAL_T_ORDER_REPOSITORY.findTodoData(shardingContext.getShardingParameter(), 10) + .forEach(each -> VIRTUAL_T_ORDER_REPOSITORY.setCompleted(each.id())); + }, + JobConfiguration.newBuilder("testJavaSimpleJob", 3) + .cron("0/5 * * * * ?") + .shardingItemParameters("0=Norddorf,1=Bordeaux,2=Somerset") + .build() + ); + assertDoesNotThrow(() -> { + jobBootstrap.schedule(); + jobBootstrap.shutdown(); + }); + } + + @Test + void testJavaDataflowElasticJob() { + ScheduleJobBootstrap jobBootstrap = new ScheduleJobBootstrap(registryCenter, new DataflowJob() { + @Override + public List fetchData(ShardingContext shardingContext) { + assertThat(shardingContext.getShardingItem()).isEqualTo(3); + return VIRTUAL_T_ORDER_REPOSITORY.findTodoData(shardingContext.getShardingParameter(), 10); + } + + @Override + public void processData(ShardingContext shardingContext, List data) { + assertThat(shardingContext.getShardingItem()).isEqualTo(3); + data.stream().mapToLong(TOrderPOJO::id).forEach(VIRTUAL_T_ORDER_REPOSITORY::setCompleted); + } + }, + JobConfiguration.newBuilder("testJavaDataflowElasticJob", 3) + .cron("0/5 * * * * ?") + .shardingItemParameters("0=Norddorf,1=Bordeaux,2=Somerset") + .setProperty(DataflowJobProperties.STREAM_PROCESS_KEY, Boolean.TRUE.toString()) + .build() + ); + assertDoesNotThrow(() -> { + jobBootstrap.schedule(); + jobBootstrap.shutdown(); + }); + } + + @Test + void testJavaOneOffSimpleJob() { + OneOffJobBootstrap jobBootstrap = new OneOffJobBootstrap(registryCenter, + (SimpleJob) shardingContext -> { + assertThat(shardingContext.getShardingItem()).isEqualTo(3); + VIRTUAL_T_ORDER_REPOSITORY.findTodoData(shardingContext.getShardingParameter(), 10) + .forEach(each -> VIRTUAL_T_ORDER_REPOSITORY.setCompleted(each.id())); + }, + JobConfiguration.newBuilder("testJavaOneOffSimpleJob", 3) + .shardingItemParameters("0=Norddorf,1=Bordeaux,2=Somerset") + .build() + ); + assertDoesNotThrow(() -> { + jobBootstrap.execute(); + jobBootstrap.shutdown(); + }); + } +} diff --git a/tests/src/org.apache.shardingsphere.elasticjob/elasticjob-lite-core/3.0.3/src/test/java/org_apache_shardingsphere_elasticjob/elasticjob_lite_core/entity/TOrderPOJO.java b/tests/src/org.apache.shardingsphere.elasticjob/elasticjob-lite-core/3.0.3/src/test/java/org_apache_shardingsphere_elasticjob/elasticjob_lite_core/entity/TOrderPOJO.java new file mode 100644 index 00000000..128ff70c --- /dev/null +++ b/tests/src/org.apache.shardingsphere.elasticjob/elasticjob-lite-core/3.0.3/src/test/java/org_apache_shardingsphere_elasticjob/elasticjob_lite_core/entity/TOrderPOJO.java @@ -0,0 +1,17 @@ +/* + * Copyright and related rights waived via CC0 + * + * You should have received a copy of the CC0 legalcode along with this + * work. If not, see . + */ +package org_apache_shardingsphere_elasticjob.elasticjob_lite_core.entity; + +import java.io.Serializable; + +public record TOrderPOJO( + long id, + String location, + TableStatus tableStatus + +) implements Serializable { +} diff --git a/tests/src/org.apache.shardingsphere.elasticjob/elasticjob-lite-core/3.0.3/src/test/java/org_apache_shardingsphere_elasticjob/elasticjob_lite_core/entity/TableStatus.java b/tests/src/org.apache.shardingsphere.elasticjob/elasticjob-lite-core/3.0.3/src/test/java/org_apache_shardingsphere_elasticjob/elasticjob_lite_core/entity/TableStatus.java new file mode 100644 index 00000000..caa6fd56 --- /dev/null +++ b/tests/src/org.apache.shardingsphere.elasticjob/elasticjob-lite-core/3.0.3/src/test/java/org_apache_shardingsphere_elasticjob/elasticjob_lite_core/entity/TableStatus.java @@ -0,0 +1,12 @@ +/* + * Copyright and related rights waived via CC0 + * + * You should have received a copy of the CC0 legalcode along with this + * work. If not, see . + */ +package org_apache_shardingsphere_elasticjob.elasticjob_lite_core.entity; + +public enum TableStatus { + TODO, + COMPLETED +} diff --git a/tests/src/org.apache.shardingsphere.elasticjob/elasticjob-lite-core/3.0.3/src/test/java/org_apache_shardingsphere_elasticjob/elasticjob_lite_core/repository/VirtualTOrderRepository.java b/tests/src/org.apache.shardingsphere.elasticjob/elasticjob-lite-core/3.0.3/src/test/java/org_apache_shardingsphere_elasticjob/elasticjob_lite_core/repository/VirtualTOrderRepository.java new file mode 100644 index 00000000..137e0dd8 --- /dev/null +++ b/tests/src/org.apache.shardingsphere.elasticjob/elasticjob-lite-core/3.0.3/src/test/java/org_apache_shardingsphere_elasticjob/elasticjob_lite_core/repository/VirtualTOrderRepository.java @@ -0,0 +1,43 @@ +/* + * Copyright and related rights waived via CC0 + * + * You should have received a copy of the CC0 legalcode along with this + * work. If not, see . + */ +package org_apache_shardingsphere_elasticjob.elasticjob_lite_core.repository; + +import org_apache_shardingsphere_elasticjob.elasticjob_lite_core.entity.TOrderPOJO; +import org_apache_shardingsphere_elasticjob.elasticjob_lite_core.entity.TableStatus; + +import java.util.ArrayList; +import java.util.List; +import java.util.Map; +import java.util.concurrent.ConcurrentHashMap; +import java.util.stream.Collectors; +import java.util.stream.LongStream; + +public class VirtualTOrderRepository { + private final Map data = new ConcurrentHashMap<>(300, 1); + + public VirtualTOrderRepository() { + addData(0L, 100L, "Norddorf"); + addData(100L, 200L, "Bordeaux"); + addData(200L, 300L, "Somerset"); + } + + private void addData(final long startId, final long endId, final String location) { + LongStream.range(startId, endId).forEachOrdered(i -> data.put(i, new TOrderPOJO(i, location, TableStatus.TODO))); + } + + public List findTodoData(final String location, final int limitNumber) { + return data.entrySet().stream() + .limit(limitNumber) + .map(Map.Entry::getValue) + .filter(tOrderPOJO -> location.equals(tOrderPOJO.location()) && TableStatus.TODO == tOrderPOJO.tableStatus()) + .collect(Collectors.toCollection(() -> new ArrayList<>(limitNumber))); + } + + public void setCompleted(final long id) { + data.replace(id, new TOrderPOJO(id, data.get(id).location(), TableStatus.COMPLETED)); + } +} diff --git a/tests/src/org.apache.shardingsphere.elasticjob/elasticjob-lite-core/3.0.3/src/test/resources/META-INF/native-image/org.apache.zookeeper/zookeeper/3.9.0/reflect-config.json b/tests/src/org.apache.shardingsphere.elasticjob/elasticjob-lite-core/3.0.3/src/test/resources/META-INF/native-image/org.apache.zookeeper/zookeeper/3.9.0/reflect-config.json new file mode 100644 index 00000000..a6e52201 --- /dev/null +++ b/tests/src/org.apache.shardingsphere.elasticjob/elasticjob-lite-core/3.0.3/src/test/resources/META-INF/native-image/org.apache.zookeeper/zookeeper/3.9.0/reflect-config.json @@ -0,0 +1,56 @@ +[ +{ + "condition":{"typeReachable":"org.apache.zookeeper.ZooKeeper"}, + "name":"org.apache.zookeeper.ClientCnxnSocketNIO", + "methods":[{"name":"","parameterTypes":["org.apache.zookeeper.client.ZKClientConfig"] }] +}, +{ + "condition":{"typeReachable":"org.apache.zookeeper.metrics.impl.MetricsProviderBootstrap"}, + "name":"org.apache.zookeeper.metrics.impl.DefaultMetricsProvider", + "methods":[{"name":"","parameterTypes":[] }] +}, +{ + "condition":{"typeReachable":"org.apache.zookeeper.server.quorum.QuorumPeerConfig"}, + "name":"org.apache.zookeeper.metrics.impl.DefaultMetricsProvider" +}, +{ + "condition":{"typeReachable":"org.apache.zookeeper.server.ServerCnxnFactory"}, + "name":"org.apache.zookeeper.server.ConnectionBean", + "queryAllPublicConstructors":true +}, +{ + "condition":{"typeReachable":"org.apache.zookeeper.server.ServerCnxnFactory"}, + "name":"org.apache.zookeeper.server.ConnectionMXBean", + "queryAllPublicMethods":true +}, +{ + "condition":{"typeReachable":"org.apache.zookeeper.server.ZooKeeperServer"}, + "name":"org.apache.zookeeper.server.DataTreeBean", + "queryAllPublicConstructors":true +}, +{ + "condition":{"typeReachable":"org.apache.zookeeper.server.ZooKeeperServer"}, + "name":"org.apache.zookeeper.server.DataTreeMXBean", + "queryAllPublicMethods":true +}, +{ + "condition":{"typeReachable":"org.apache.zookeeper.server.ServerCnxnFactory"}, + "name":"org.apache.zookeeper.server.NIOServerCnxnFactory", + "methods":[{"name":"","parameterTypes":[] }] +}, +{ + "condition":{"typeReachable":"org.apache.zookeeper.server.ZooKeeperServer"}, + "name":"org.apache.zookeeper.server.ZooKeeperServerBean", + "queryAllPublicConstructors":true +}, +{ + "condition":{"typeReachable":"org.apache.zookeeper.server.ZooKeeperServer"}, + "name":"org.apache.zookeeper.server.ZooKeeperServerMXBean", + "queryAllPublicMethods":true +}, +{ + "condition":{"typeReachable":"org.apache.zookeeper.server.watch.WatchManagerFactory"}, + "name":"org.apache.zookeeper.server.watch.WatchManager", + "methods":[{"name":"","parameterTypes":[] }] +} +]