diff --git a/e2e/pom.xml b/e2e/pom.xml
index d56554e749..510fd468b9 100644
--- a/e2e/pom.xml
+++ b/e2e/pom.xml
@@ -14,6 +14,9 @@
../pom.xml
+
+ 2.0-M4-groovy-3.0
+
io.kubernetes
@@ -29,7 +32,27 @@
org.spockframework
spock-core
- 2.0-M4-groovy-3.0
+ ${spock.version}
+ test
+
+
+ junit
+ junit
+ test
+
+
+
+
+
+ org.junit.vintage
+ junit-vintage-engine
+ 5.7.0
+ test
+
+
+ org.spockframework
+ spock-junit4
+ ${spock.version}
test
@@ -51,19 +74,8 @@
org.codehaus.gmavenplus
gmavenplus-plugin
-
-
-
- ${project.basedir}/src/test/groovy
-
- **/*.groovy
-
-
-
-
-
compileTests
diff --git a/e2e/src/test/java/io/kubernetes/client/e2e/extended/leaderelection/LeaderElectorTest.java b/e2e/src/test/java/io/kubernetes/client/e2e/extended/leaderelection/LeaderElectorTest.java
new file mode 100644
index 0000000000..e2e3263b77
--- /dev/null
+++ b/e2e/src/test/java/io/kubernetes/client/e2e/extended/leaderelection/LeaderElectorTest.java
@@ -0,0 +1,337 @@
+/*
+Copyright 2020 The Kubernetes Authors.
+Licensed under the Apache License, Version 2.0 (the "License");
+you may not use this file except in compliance with the License.
+You may obtain a copy of the License at
+http://www.apache.org/licenses/LICENSE-2.0
+Unless required by applicable law or agreed to in writing, software
+distributed under the License is distributed on an "AS IS" BASIS,
+WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+See the License for the specific language governing permissions and
+limitations under the License.
+*/
+package io.kubernetes.client.e2e.extended.leaderelection;
+
+import io.kubernetes.client.extended.leaderelection.LeaderElectionConfig;
+import io.kubernetes.client.extended.leaderelection.LeaderElector;
+import io.kubernetes.client.extended.leaderelection.Lock;
+import io.kubernetes.client.extended.leaderelection.resourcelock.ConfigMapLock;
+import io.kubernetes.client.extended.leaderelection.resourcelock.EndpointsLock;
+import io.kubernetes.client.extended.leaderelection.resourcelock.LeaseLock;
+import io.kubernetes.client.openapi.ApiClient;
+import io.kubernetes.client.openapi.ApiException;
+import io.kubernetes.client.openapi.apis.CoordinationV1Api;
+import io.kubernetes.client.openapi.apis.CoreV1Api;
+import io.kubernetes.client.util.ClientBuilder;
+import java.io.IOException;
+import java.net.HttpURLConnection;
+import java.time.Duration;
+import java.util.ArrayList;
+import java.util.Collection;
+import java.util.List;
+import java.util.concurrent.BrokenBarrierException;
+import java.util.concurrent.CountDownLatch;
+import java.util.concurrent.CyclicBarrier;
+import java.util.concurrent.atomic.AtomicInteger;
+import java.util.concurrent.atomic.AtomicReference;
+import org.joda.time.format.*;
+import org.junit.Assert;
+import org.junit.Before;
+import org.junit.Test;
+import org.junit.runner.RunWith;
+import org.junit.runners.Parameterized;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+@RunWith(Parameterized.class)
+public class LeaderElectorTest {
+
+ private static final Logger LOGGER = LoggerFactory.getLogger(LeaderElectorTest.class);
+
+ private static final String LOCK_RESOURCE_NAME = "leader-election-it";
+ private static final String NAMESPACE = "default";
+
+ private enum LockType {
+ ConfigMap,
+ Endpoints,
+ Lease
+ }
+
+ @Parameterized.Parameters(name = "{0}")
+ public static Collection