Repository: geode Updated Branches: refs/heads/feature/GEODE-2420 88eaa5b09 -> 587ee2efe
Refactoring and test enhancement. - Change result sender to send an object containing estimated size of logs and estimate of available space on disk - more tests for the LogSizer and new ExportedLogsSizeDetail Project: http://git-wip-us.apache.org/repos/asf/geode/repo Commit: http://git-wip-us.apache.org/repos/asf/geode/commit/587ee2ef Tree: http://git-wip-us.apache.org/repos/asf/geode/tree/587ee2ef Diff: http://git-wip-us.apache.org/repos/asf/geode/diff/587ee2ef Branch: refs/heads/feature/GEODE-2420 Commit: 587ee2efe1f5b797a7dda26e036d4bf50142381a Parents: 88eaa5b Author: Ken Howe <kh...@pivotal.io> Authored: Fri Mar 24 16:05:45 2017 -0700 Committer: Ken Howe <kh...@pivotal.io> Committed: Fri Mar 24 16:05:45 2017 -0700 ---------------------------------------------------------------------- .../cli/functions/ExportedLogsSizeDetail.java | 93 ++++++++++++ .../cli/functions/SizeExportLogsFunction.java | 10 +- .../management/internal/cli/util/LogSizer.java | 23 ++- .../functions/ExportedLogsSizeDetailTest.java | 145 +++++++++++++++++++ .../SizeExportLogsFunctionCacheTest.java | 20 +-- .../SizeExportLogsFunctionFileTest.java | 22 +-- .../cli/functions/SizeExportLogsTestSuite.java | 27 ++++ .../internal/cli/util/LogSizerTest.java | 94 ++++++++++++ 8 files changed, 392 insertions(+), 42 deletions(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/geode/blob/587ee2ef/geode-core/src/main/java/org/apache/geode/management/internal/cli/functions/ExportedLogsSizeDetail.java ---------------------------------------------------------------------- diff --git a/geode-core/src/main/java/org/apache/geode/management/internal/cli/functions/ExportedLogsSizeDetail.java b/geode-core/src/main/java/org/apache/geode/management/internal/cli/functions/ExportedLogsSizeDetail.java new file mode 100644 index 0000000..1ce72c4 --- /dev/null +++ b/geode-core/src/main/java/org/apache/geode/management/internal/cli/functions/ExportedLogsSizeDetail.java @@ -0,0 +1,93 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one or more contributor license + * agreements. See the NOTICE file distributed with this work for additional information regarding + * copyright ownership. The ASF 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.apache.geode.management.internal.cli.functions; + +import org.apache.geode.DataSerializable; +import org.apache.geode.DataSerializer; + +import java.io.DataInput; +import java.io.DataOutput; +import java.io.IOException; + +public class ExportedLogsSizeDetail implements DataSerializable { + private long logsSize; + private long availableDisk; + + // Used for deserialization only + public ExportedLogsSizeDetail() { + logsSize = 0; + availableDisk = 0; + } + + public ExportedLogsSizeDetail(long logsSize, long availableDisk) { + this.logsSize = logsSize; + this.availableDisk = availableDisk; + } + + public long getAvailableDisk() { + return availableDisk; + } + + public long getLogsSize() { + + return logsSize; + } + + @Override + public boolean equals(Object o) { + if (this == o) { + return true; + } + if (o == null || getClass() != o.getClass()) { + return false; + } + + ExportedLogsSizeDetail that = (ExportedLogsSizeDetail) o; + + if (logsSize != that.logsSize) { + return false; + } + return availableDisk == that.availableDisk; + } + + @Override + public int hashCode() { + int result = (int) (logsSize ^ (logsSize >>> 32)); + result = 31 * result + (int) (availableDisk ^ (availableDisk >>> 32)); + return result; + } + + @Override + public void toData(DataOutput out) throws IOException { + DataSerializer.writeLong(logsSize, out); + DataSerializer.writeLong(availableDisk, out); + } + + @Override + public void fromData(DataInput in) throws IOException, ClassNotFoundException { + logsSize = DataSerializer.readLong(in); + availableDisk = DataSerializer.readLong(in); + } + + @Override + public String toString() { + StringBuilder result = new StringBuilder(); + result.append("["); + result.append("logsSize: " + logsSize); + result.append(", availableDisk: " + availableDisk); + result.append("]"); + return result.toString(); + } +} http://git-wip-us.apache.org/repos/asf/geode/blob/587ee2ef/geode-core/src/main/java/org/apache/geode/management/internal/cli/functions/SizeExportLogsFunction.java ---------------------------------------------------------------------- diff --git a/geode-core/src/main/java/org/apache/geode/management/internal/cli/functions/SizeExportLogsFunction.java b/geode-core/src/main/java/org/apache/geode/management/internal/cli/functions/SizeExportLogsFunction.java index 3a09219..b481035 100644 --- a/geode-core/src/main/java/org/apache/geode/management/internal/cli/functions/SizeExportLogsFunction.java +++ b/geode-core/src/main/java/org/apache/geode/management/internal/cli/functions/SizeExportLogsFunction.java @@ -47,10 +47,12 @@ public class SizeExportLogsFunction extends ExportLogsFunction implements Functi GemFireCacheImpl cache = GemFireCacheImpl.getInstance(); DistributionConfig config = cache.getDistributedSystem().getConfig(); Args args = (Args) context.getArguments(); - + // TODO: Find how much space is availbel on the disk where the temporary copies of the logs will be written + long availableDisk = config.getLogFile().getUsableSpace(); long estimatedSize = estimateLogFileSize(cache.getMyId(), config.getLogFile(), config.getStatisticArchiveFile(), args); - context.getResultSender().lastResult(Arrays.asList(new long[]{estimatedSize})); +// context.getResultSender().lastResult(Arrays.asList(new long[]{estimatedSize})); + context.getResultSender().lastResult(Arrays.asList(new ExportedLogsSizeDetail(estimatedSize, availableDisk))); } catch (Exception e) { e.printStackTrace(); @@ -61,6 +63,8 @@ public class SizeExportLogsFunction extends ExportLogsFunction implements Functi long estimateLogFileSize(final DistributedMember member, final File logFile, final File statArchive, final Args args) throws ParseException, IOException { + LOGGER.info("SizeExportLogsFunction started for member {}", member); + File baseLogFile = null; File baseStatsFile = null; @@ -76,7 +80,7 @@ public class SizeExportLogsFunction extends ExportLogsFunction implements Functi long estimatedSize = new LogSizer(logFilter, baseLogFile, baseStatsFile).getFilteredSize(); - LOGGER.info("Estimated exported log file size: " + estimatedSize); + LOGGER.info("Estimated log file size: " + estimatedSize); return estimatedSize; } http://git-wip-us.apache.org/repos/asf/geode/blob/587ee2ef/geode-core/src/main/java/org/apache/geode/management/internal/cli/util/LogSizer.java ---------------------------------------------------------------------- diff --git a/geode-core/src/main/java/org/apache/geode/management/internal/cli/util/LogSizer.java b/geode-core/src/main/java/org/apache/geode/management/internal/cli/util/LogSizer.java index 4a6ea60..70bb0b5 100644 --- a/geode-core/src/main/java/org/apache/geode/management/internal/cli/util/LogSizer.java +++ b/geode-core/src/main/java/org/apache/geode/management/internal/cli/util/LogSizer.java @@ -14,6 +14,7 @@ */ package org.apache.geode.management.internal.cli.util; +import static java.util.List.*; import static java.util.stream.Collectors.toList; import org.apache.commons.io.FileUtils; @@ -27,6 +28,7 @@ import java.io.IOException; import java.nio.file.Files; import java.nio.file.Path; import java.text.ParseException; +import java.util.Collections; import java.util.List; import java.util.Scanner; import java.util.function.Predicate; @@ -60,7 +62,6 @@ public class LogSizer { * export. */ public long getFilteredSize() throws IOException { - Path tempDirectory = Files.createTempDirectory("exportLogs"); if (baseLogFile != null) { for (Path logFile : findLogFiles(baseLogFile.toPath().getParent())) { @@ -70,12 +71,11 @@ public class LogSizer { if (baseStatsFile != null) { for (Path statFile : findStatFiles(baseStatsFile.toPath().getParent())) { - filteredSize += FileUtils.sizeOf(statFile.toFile()); + filteredSize += statFile.toFile().length(); +// filteredSize += FileUtils.sizeOf(statFile.toFile()); } } - FileUtils.deleteDirectory(tempDirectory.toFile()); - return filteredSize; } @@ -98,16 +98,6 @@ public class LogSizer { return size; } - - private void writeLine(String line, BufferedWriter writer) { - try { - writer.write(line); - writer.newLine(); - } catch (IOException e) { - throw new RuntimeException("Unable to write to log file", e); - } - } - protected List<Path> findLogFiles(Path workingDir) throws IOException { Predicate<Path> logFileSelector = (Path file) -> file.toString().toLowerCase().endsWith(".log"); return findFiles(workingDir, logFileSelector); @@ -122,6 +112,11 @@ public class LogSizer { private List<Path> findFiles(Path workingDir, Predicate<Path> fileSelector) throws IOException { Stream<Path> selectedFiles = + null; + if (!workingDir.toFile().isDirectory()) { + return Collections.emptyList(); + } + selectedFiles = Files.list(workingDir).filter(fileSelector).filter(this.logFilter::acceptsFile); return selectedFiles.collect(toList()); http://git-wip-us.apache.org/repos/asf/geode/blob/587ee2ef/geode-core/src/test/java/org/apache/geode/management/internal/cli/functions/ExportedLogsSizeDetailTest.java ---------------------------------------------------------------------- diff --git a/geode-core/src/test/java/org/apache/geode/management/internal/cli/functions/ExportedLogsSizeDetailTest.java b/geode-core/src/test/java/org/apache/geode/management/internal/cli/functions/ExportedLogsSizeDetailTest.java new file mode 100644 index 0000000..eab1e0b --- /dev/null +++ b/geode-core/src/test/java/org/apache/geode/management/internal/cli/functions/ExportedLogsSizeDetailTest.java @@ -0,0 +1,145 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one or more contributor license + * agreements. See the NOTICE file distributed with this work for additional information regarding + * copyright ownership. The ASF 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.apache.geode.management.internal.cli.functions; + +import static org.assertj.core.api.Assertions.*; + +import org.junit.After; +import org.junit.Before; +import org.junit.Test; + +import java.io.ByteArrayInputStream; +import java.io.ByteArrayOutputStream; +import java.io.DataInputStream; +import java.io.DataOutput; +import java.io.DataOutputStream; + +public class ExportedLogsSizeDetailTest { + @Before + public void setUp() throws Exception { + + } + + @After + public void tearDown() throws Exception { + + } + + @Test + public final void testExportedLogsSizeDetailConstructor() { + ExportedLogsSizeDetail sizeDetail = + new ExportedLogsSizeDetail(1L, 2L); + assertThat(sizeDetail).isNotNull(); + assertThat(sizeDetail.getLogsSize()).isEqualTo(1L); + assertThat(sizeDetail.getAvailableDisk()).isEqualTo(2L); + } + + @Test + public final void testExportedLogsSizeDetail0ArgConstructor() { + ExportedLogsSizeDetail sizeDetail = new ExportedLogsSizeDetail(); + assertThat(sizeDetail).isNotNull(); + assertThat(sizeDetail.getLogsSize()).isEqualTo(0L); + assertThat(sizeDetail.getAvailableDisk()).isEqualTo(0L); + } + + @Test + public void equals_returnsTrueForTwoInstancesWithTheSameFieldValues() throws Exception { + ExportedLogsSizeDetail sizeDetail1 = + new ExportedLogsSizeDetail(3L, 4L); + ExportedLogsSizeDetail sizeDetail2 = + new ExportedLogsSizeDetail(3L, 4L); + assertThat(sizeDetail1.equals(sizeDetail1)).isTrue(); + assertThat(sizeDetail1.equals(sizeDetail2)).isTrue(); + assertThat(sizeDetail2.equals(sizeDetail1)).isTrue(); + } + + @Test + public void equals_returnsFalseWhenLogsSizeDiffers() throws Exception { + ExportedLogsSizeDetail sizeDetail1 = + new ExportedLogsSizeDetail(3L, 4L); + ExportedLogsSizeDetail sizeDetail2 = + new ExportedLogsSizeDetail(4L, 4L); + assertThat(sizeDetail1.equals(sizeDetail2)).isFalse(); + assertThat(sizeDetail2.equals(sizeDetail1)).isFalse(); + } + + @Test + public void equals_returnsFalseWhenAvailableDiskDiffers() throws Exception { + ExportedLogsSizeDetail sizeDetail1 = + new ExportedLogsSizeDetail(3L, 4L); + ExportedLogsSizeDetail sizeDetail2 = + new ExportedLogsSizeDetail(3L, 3L); + assertThat(sizeDetail1.equals(sizeDetail2)).isFalse(); + assertThat(sizeDetail2.equals(sizeDetail1)).isFalse(); + } + + @Test + public void equals_returnsFalseForComparisonWithNullObject() throws Exception { + ExportedLogsSizeDetail sizeDetail1 = + new ExportedLogsSizeDetail(3L, 4L); + ExportedLogsSizeDetail sizeDetail2 = null; +// new ExportedLogsSizeDetail(3L, 4L); + assertThat(sizeDetail1.equals(sizeDetail2)).isFalse(); + } + + @Test + public final void testClassInequality() { + ExportedLogsSizeDetail sizeDeatai1 = + new ExportedLogsSizeDetail(5L, 6L); + String sizeDetail2 = sizeDeatai1.toString(); + assertThat(sizeDeatai1.equals(sizeDetail2)).isFalse(); + assertThat(sizeDetail2.equals(sizeDeatai1)).isFalse(); + } + + @Test + public void testHashCode() throws Exception { + ExportedLogsSizeDetail sizeDetail1 = new ExportedLogsSizeDetail(); + ExportedLogsSizeDetail sizeDetail2 = + new ExportedLogsSizeDetail(11L, 12L); + ExportedLogsSizeDetail sizeDetail3 = + new ExportedLogsSizeDetail(12L, 11L); + + assertThat(sizeDetail1.hashCode()).isNotEqualTo(sizeDetail2.hashCode()); + assertThat(sizeDetail1.hashCode()).isNotEqualTo(sizeDetail3.hashCode()); + assertThat(sizeDetail2.hashCode()).isNotEqualTo(sizeDetail3.hashCode()); + + assertThat(sizeDetail1.hashCode()).isEqualTo(0); + assertThat(sizeDetail2.hashCode()).isEqualTo(353); + assertThat(sizeDetail3.hashCode()).isEqualTo(383); + + } + + @Test + public void deserialization_setsFieldsToOriginalUnserializedValues() throws Exception { + ExportedLogsSizeDetail sizeDetail = + new ExportedLogsSizeDetail(3L, 4L); + ByteArrayOutputStream baos = new ByteArrayOutputStream(); + DataOutput out = new DataOutputStream(baos); + sizeDetail.toData(out); + ExportedLogsSizeDetail sizeDetailIn = new ExportedLogsSizeDetail(); + sizeDetailIn.fromData(new DataInputStream(new ByteArrayInputStream(baos.toByteArray()))); + + assertThat(sizeDetailIn).isEqualTo(sizeDetail); + } + + @Test + public void testToString() throws Exception { + ExportedLogsSizeDetail sizeDetail = + new ExportedLogsSizeDetail(7L, 8L); + assertThat(sizeDetail.toString()).isEqualTo("[logsSize: 7, availableDisk: 8]"); + + } + +} \ No newline at end of file http://git-wip-us.apache.org/repos/asf/geode/blob/587ee2ef/geode-core/src/test/java/org/apache/geode/management/internal/cli/functions/SizeExportLogsFunctionCacheTest.java ---------------------------------------------------------------------- diff --git a/geode-core/src/test/java/org/apache/geode/management/internal/cli/functions/SizeExportLogsFunctionCacheTest.java b/geode-core/src/test/java/org/apache/geode/management/internal/cli/functions/SizeExportLogsFunctionCacheTest.java index bcd6da7..4596a9a 100644 --- a/geode-core/src/test/java/org/apache/geode/management/internal/cli/functions/SizeExportLogsFunctionCacheTest.java +++ b/geode-core/src/test/java/org/apache/geode/management/internal/cli/functions/SizeExportLogsFunctionCacheTest.java @@ -26,6 +26,7 @@ import org.apache.geode.cache.execute.FunctionContext; import org.apache.geode.cache.execute.ResultSender; import org.apache.geode.distributed.DistributedMember; import org.apache.geode.internal.cache.execute.FunctionContextImpl; +import org.apache.geode.management.internal.cli.functions.ExportedLogsSizeDetail; import org.junit.After; import org.junit.Before; import org.junit.Rule; @@ -90,9 +91,11 @@ public class SizeExportLogsFunctionCacheTest { TestResultSender resultSender = new TestResultSender(); FunctionContext context = new FunctionContextImpl("functionId", nonFilteringArgs, resultSender); - long expectedSize = FileUtils.sizeOf(logFile) + FileUtils.sizeOf(statFile); + // log and stat files sizes are not constant with a real cache running, so check for the sizer estimate within a range + long initalFileSizes = FileUtils.sizeOf(logFile) + FileUtils.sizeOf(statFile); new SizeExportLogsFunction().execute(context); - getAndVerifySizeEstimate(resultSender, expectedSize); + long finalFileSizes = FileUtils.sizeOf(logFile) + FileUtils.sizeOf(statFile); + getAndVerifySizeEstimate(resultSender, initalFileSizes, finalFileSizes); } @Test @@ -111,14 +114,18 @@ public class SizeExportLogsFunctionCacheTest { private void getAndVerifySizeEstimate(TestResultSender resultSender, long expectedSize) throws Throwable { + getAndVerifySizeEstimate(resultSender, expectedSize, expectedSize); + } + + private void getAndVerifySizeEstimate(TestResultSender resultSender, long minExpected, long maxExpected) + throws Throwable { List<?> results = resultSender.getResults(); assertThat(results).isNotNull(); assertThat(results.size()).isEqualTo(1); List<?> result = (List<?>)results.get(0); assertThat(result).isNotNull(); - assertThat(((long[])result.get(0))[0]).isEqualTo(expectedSize); - + assertThat(((ExportedLogsSizeDetail) result.get(0)).getLogsSize()).isGreaterThanOrEqualTo(minExpected).isLessThanOrEqualTo(maxExpected); } @Test @@ -130,11 +137,6 @@ public class SizeExportLogsFunctionCacheTest { new SizeExportLogsFunction().execute(context); assertThatThrownBy(() -> resultSender.getResults()).isInstanceOf(NullPointerException.class); - -// List<?> results = resultSender.getResults(); -// List<?> result = (List<?>)results.get(0); -// assertThat(result).isInstanceOf(Exception.class); - } private static class TestResultSender implements ResultSender { http://git-wip-us.apache.org/repos/asf/geode/blob/587ee2ef/geode-core/src/test/java/org/apache/geode/management/internal/cli/functions/SizeExportLogsFunctionFileTest.java ---------------------------------------------------------------------- diff --git a/geode-core/src/test/java/org/apache/geode/management/internal/cli/functions/SizeExportLogsFunctionFileTest.java b/geode-core/src/test/java/org/apache/geode/management/internal/cli/functions/SizeExportLogsFunctionFileTest.java index 72ba7f8..3c1379d 100644 --- a/geode-core/src/test/java/org/apache/geode/management/internal/cli/functions/SizeExportLogsFunctionFileTest.java +++ b/geode-core/src/test/java/org/apache/geode/management/internal/cli/functions/SizeExportLogsFunctionFileTest.java @@ -15,18 +15,16 @@ package org.apache.geode.management.internal.cli.functions; import static org.assertj.core.api.Assertions.*; -import static org.mockito.Mockito.doReturn; import static org.mockito.Mockito.mock; import static org.mockito.Mockito.spy; import static org.mockito.Mockito.when; import org.apache.geode.cache.execute.FunctionContext; -import org.apache.geode.cache.execute.ResultSender; -import org.apache.geode.internal.cache.execute.FunctionContextImpl; import org.apache.geode.management.internal.cli.functions.ExportLogsFunction.Args; import org.apache.commons.io.FileUtils; import org.apache.geode.distributed.DistributedMember; import org.apache.geode.test.junit.categories.IntegrationTest; +import org.junit.After; import org.junit.Before; import org.junit.Rule; import org.junit.Test; @@ -38,8 +36,6 @@ import java.io.File; import java.io.IOException; import java.io.PrintWriter; import java.util.ArrayList; -import java.util.Collections; -import java.util.LinkedList; import java.util.List; @Category(IntegrationTest.class) @@ -63,6 +59,11 @@ public class SizeExportLogsFunctionFileTest { this.nonFilteringArgs = new Args(null, null, null, false,false, false); } + @After + public void after() throws Exception { + FileUtils.deleteDirectory(dir); + } + @Test public void bothFiles_returnsCombinedSize() throws Exception { List<File> logFiles = createLogFiles(new File(dir.getName(), testName.getMethodName()), 1, 1, @@ -84,11 +85,9 @@ public class SizeExportLogsFunctionFileTest { expectedSize = 0; List<File> logFiles = createLogFiles(new File(dir.getName(), testName.getMethodName()), 1, 3, FileUtils.ONE_KB); logFiles.forEach((file) -> {expectedSize += FileUtils.sizeOf(file);}); -// long logFileSize = FileUtils.sizeOf(logFile); List<File> statFiles = createStatFiles(new File(dir.getName(), testName.getMethodName()), 1, 2, FileUtils.ONE_KB * 2); statFiles.forEach((file) -> {expectedSize += FileUtils.sizeOf(file);}); -// long statFileSize = FileUtils.sizeOf(statArchive); SizeExportLogsFunction function = new SizeExportLogsFunction(); assertThat(function.estimateLogFileSize(this.member, logFiles.get(0), statFiles.get(0), nonFilteringArgs)).isEqualTo(expectedSize); @@ -97,12 +96,8 @@ public class SizeExportLogsFunctionFileTest { @Test public void emptyFiles_returnsZeroSize() throws Exception { List<File> logFiles = createLogFiles(new File(dir.getName(), testName.getMethodName()), 1, 3, 0); -// logFiles.forEach((file) -> {expectedSize += FileUtils.sizeOf(file);}); -// long logFileSize = FileUtils.sizeOf(logFile); List<File> statFiles = createStatFiles(new File(dir.getName(), testName.getMethodName()), 1, 2, 0); -// statFiles.forEach((file) -> {expectedSize += FileUtils.sizeOf(file);}); -// long statFileSize = FileUtils.sizeOf(statArchive); SizeExportLogsFunction function = new SizeExportLogsFunction(); assertThat(function.estimateLogFileSize(this.member, logFiles.get(0), statFiles.get(0), nonFilteringArgs)).isEqualTo(0); } @@ -137,11 +132,6 @@ public class SizeExportLogsFunctionFileTest { return files; } - @Test - public void negativeEstimatedSize() throws Exception { - - } - private String baseName(String logFileName) { // base log file: myfile.log // mainId childId for rolling http://git-wip-us.apache.org/repos/asf/geode/blob/587ee2ef/geode-core/src/test/java/org/apache/geode/management/internal/cli/functions/SizeExportLogsTestSuite.java ---------------------------------------------------------------------- diff --git a/geode-core/src/test/java/org/apache/geode/management/internal/cli/functions/SizeExportLogsTestSuite.java b/geode-core/src/test/java/org/apache/geode/management/internal/cli/functions/SizeExportLogsTestSuite.java new file mode 100644 index 0000000..176e4cd --- /dev/null +++ b/geode-core/src/test/java/org/apache/geode/management/internal/cli/functions/SizeExportLogsTestSuite.java @@ -0,0 +1,27 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one or more contributor license + * agreements. See the NOTICE file distributed with this work for additional information regarding + * copyright ownership. The ASF 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.apache.geode.management.internal.cli.functions; +import org.apache.geode.management.internal.cli.util.LogSizerTest; +import org.junit.runner.RunWith; +import org.junit.runners.Suite; + +/** + * JUnit, DUnit and Integration tests for SizeExportLogsFunction. + */ +@Suite.SuiteClasses({SizeExportLogsFunctionCacheTest.class, SizeExportLogsFunctionFileTest.class, LogSizerTest.class}) +@RunWith(Suite.class) +public class SizeExportLogsTestSuite { + +} \ No newline at end of file http://git-wip-us.apache.org/repos/asf/geode/blob/587ee2ef/geode-core/src/test/java/org/apache/geode/management/internal/cli/util/LogSizerTest.java ---------------------------------------------------------------------- diff --git a/geode-core/src/test/java/org/apache/geode/management/internal/cli/util/LogSizerTest.java b/geode-core/src/test/java/org/apache/geode/management/internal/cli/util/LogSizerTest.java new file mode 100644 index 0000000..988fa03 --- /dev/null +++ b/geode-core/src/test/java/org/apache/geode/management/internal/cli/util/LogSizerTest.java @@ -0,0 +1,94 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one or more contributor license + * agreements. See the NOTICE file distributed with this work for additional information regarding + * copyright ownership. The ASF 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.apache.geode.management.internal.cli.util; + +import static java.io.File.separator; +import static org.assertj.core.api.Assertions.*; +import static org.mockito.Mockito.mock; +import static org.mockito.Mockito.when; + +import org.apache.geode.management.internal.cli.functions.ExportLogsFunction; +import org.apache.geode.management.internal.cli.functions.SizeExportLogsFunction; +import org.apache.geode.test.junit.categories.UnitTest; +import org.junit.After; +import org.junit.Before; +import org.junit.Rule; +import org.junit.Test; +import org.junit.experimental.categories.Category; +import org.junit.rules.TemporaryFolder; +import org.junit.rules.TestName; + +import java.io.File; +import java.io.IOException; +import java.nio.file.Path; +import java.text.ParseException; + +@Category(UnitTest.class) +public class LogSizerTest { + private LogFilter logFilter; + private SizeExportLogsFunction.Args nonFilteringArgs; + + private File dir; + + @Rule + public TemporaryFolder temporaryFolder = new TemporaryFolder(); + @Rule + public TestName testName = new TestName(); + + @Before + public void setUp() throws Exception { + logFilter = mock(LogFilter.class); + dir = temporaryFolder.getRoot(); + nonFilteringArgs = new ExportLogsFunction.Args(null, null, null, false,false, false); + + } + + @After + public void tearDown() throws Exception { + + } + + @Test + public void nullFileArgs_returnsZeroSize() throws ParseException, IOException { + LogSizer sizer = new LogSizer(logFilter, null, null); + assertThat(sizer.getFilteredSize()).isEqualTo(0L); + } + + @Test + public void noFiles_returnsZeroSize() throws ParseException, IOException { + + File mockStatFile = mock(File.class); + File mockLogFile = mock(File.class); + when(mockLogFile.toPath()).thenReturn(new File("root" + separator + "parent" + separator + testName + ".log").toPath()); + when(mockStatFile.toPath()).thenReturn(new File("root" + separator + "parent" + separator + testName + ".gfs").toPath()); + LogSizer sizer = new LogSizer(logFilter, mockLogFile, mockStatFile); + assertThat(sizer.getFilteredSize()).isEqualTo(0L); + } + + @Test + public void emptyFiles_returnsZeroSize() throws ParseException, IOException { + + File mockStatFile = mock(File.class); + File mockLogFile = mock(File.class); + when(mockLogFile.toPath()).thenReturn(new File("root" + separator + "parent" + separator + testName + ".log").toPath()); + when(mockStatFile.toPath()).thenReturn(new File("root" + separator + "parent" + separator + testName + ".gfs").toPath()); + LogFilter logFilter = new LogFilter(nonFilteringArgs.getLogLevel(), nonFilteringArgs.isThisLogLevelOnly(), + nonFilteringArgs.getStartTime(), nonFilteringArgs.getEndTime()); + + LogSizer sizer = new LogSizer(logFilter, mockLogFile, mockStatFile); + assertThat(sizer.getFilteredSize()).isEqualTo(0L); + } + +} \ No newline at end of file