summaryrefslogtreecommitdiff
path: root/distribution/tools/plugin-cli/src/test/java/org/elasticsearch/plugins/ProgressInputStreamTests.java
diff options
context:
space:
mode:
authorRyan Ernst <ryan@iernst.net>2017-04-21 09:25:58 -0700
committerGitHub <noreply@github.com>2017-04-21 09:25:58 -0700
commitba4867469500b464c67da17226de745f34253163 (patch)
tree5b759129592a21f247727187f319b50e33c34fdd /distribution/tools/plugin-cli/src/test/java/org/elasticsearch/plugins/ProgressInputStreamTests.java
parentbadb2be06682a14afbd898145368b0b30e151182 (diff)
Build: Move plugin cli and tests to distribution tool (#24220)
The plugin cli currently resides inside the elasticsearch jar. This commit moves it into a plugin-cli jar. This is change alone is a no-op; it does not change anything about what is loaded at runtime. But it will allow easier testing (with fixtures in the future to test ES or maven installation), as well as eventually not loading these classes when starting elasticsearch.
Diffstat (limited to 'distribution/tools/plugin-cli/src/test/java/org/elasticsearch/plugins/ProgressInputStreamTests.java')
-rw-r--r--distribution/tools/plugin-cli/src/test/java/org/elasticsearch/plugins/ProgressInputStreamTests.java116
1 files changed, 116 insertions, 0 deletions
diff --git a/distribution/tools/plugin-cli/src/test/java/org/elasticsearch/plugins/ProgressInputStreamTests.java b/distribution/tools/plugin-cli/src/test/java/org/elasticsearch/plugins/ProgressInputStreamTests.java
new file mode 100644
index 0000000000..813921963c
--- /dev/null
+++ b/distribution/tools/plugin-cli/src/test/java/org/elasticsearch/plugins/ProgressInputStreamTests.java
@@ -0,0 +1,116 @@
+/*
+ * Licensed to Elasticsearch under one or more contributor
+ * license agreements. See the NOTICE file distributed with
+ * this work for additional information regarding copyright
+ * ownership. Elasticsearch licenses this file to you 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 org.elasticsearch.plugins;
+
+import org.elasticsearch.test.ESTestCase;
+
+import java.util.ArrayList;
+import java.util.List;
+
+import static org.hamcrest.Matchers.hasItem;
+import static org.hamcrest.Matchers.hasItems;
+import static org.hamcrest.Matchers.hasSize;
+
+public class ProgressInputStreamTests extends ESTestCase {
+
+ private List<Integer> progresses = new ArrayList<>();
+
+ public void testThatProgressListenerIsCalled() throws Exception {
+ ProgressInputStream is = newProgressInputStream(0);
+ is.checkProgress(-1);
+
+ assertThat(progresses, hasSize(1));
+ assertThat(progresses, hasItems(100));
+ }
+
+ public void testThatProgressListenerIsCalledOnUnexpectedCompletion() throws Exception {
+ ProgressInputStream is = newProgressInputStream(2);
+ is.checkProgress(-1);
+ assertThat(progresses, hasItems(100));
+ }
+
+ public void testThatProgressListenerReturnsMaxValueOnWrongExpectedSize() throws Exception {
+ ProgressInputStream is = newProgressInputStream(2);
+
+ is.checkProgress(1);
+ assertThat(progresses, hasItems(50));
+
+ is.checkProgress(3);
+ assertThat(progresses, hasItems(50, 99));
+
+ is.checkProgress(-1);
+ assertThat(progresses, hasItems(50, 99, 100));
+ }
+
+ public void testOneByte() throws Exception {
+ ProgressInputStream is = newProgressInputStream(1);
+ is.checkProgress(1);
+ is.checkProgress(-1);
+
+ assertThat(progresses, hasItems(99, 100));
+
+ }
+
+ public void testOddBytes() throws Exception {
+ int odd = randomIntBetween(10, 100) * 2 + 1;
+ ProgressInputStream is = newProgressInputStream(odd);
+ for (int i = 0; i < odd; i++) {
+ is.checkProgress(1);
+ }
+ is.checkProgress(-1);
+
+ assertThat(progresses, hasSize(Math.min(odd + 1, 100)));
+ assertThat(progresses, hasItem(100));
+ }
+
+ public void testEvenBytes() throws Exception {
+ int even = randomIntBetween(10, 100) * 2;
+ ProgressInputStream is = newProgressInputStream(even);
+
+ for (int i = 0; i < even; i++) {
+ is.checkProgress(1);
+ }
+ is.checkProgress(-1);
+
+ assertThat(progresses, hasSize(Math.min(even + 1, 100)));
+ assertThat(progresses, hasItem(100));
+ }
+
+ public void testOnProgressCannotBeCalledMoreThanOncePerPercent() throws Exception {
+ int count = randomIntBetween(150, 300);
+ ProgressInputStream is = newProgressInputStream(count);
+
+ for (int i = 0; i < count; i++) {
+ is.checkProgress(1);
+ }
+ is.checkProgress(-1);
+
+ assertThat(progresses, hasSize(100));
+ }
+
+ private ProgressInputStream newProgressInputStream(int expectedSize) {
+ return new ProgressInputStream(null, expectedSize) {
+ @Override
+ public void onProgress(int percent) {
+ progresses.add(percent);
+ }
+ };
+ }
+} \ No newline at end of file