You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@geode.apache.org by kl...@apache.org on 2017/05/23 22:39:08 UTC
[03/33] geode git commit: GEODE-2420: Resolve conflicts with recent
checkin
GEODE-2420: Resolve conflicts with recent checkin
Use InternalCache instead of GemnFireCachImpl.
Refactored product and tests
- Combined LogExporter and LogSizer.
- Remove classes no longer needed
Project: http://git-wip-us.apache.org/repos/asf/geode/repo
Commit: http://git-wip-us.apache.org/repos/asf/geode/commit/c5962aa9
Tree: http://git-wip-us.apache.org/repos/asf/geode/tree/c5962aa9
Diff: http://git-wip-us.apache.org/repos/asf/geode/diff/c5962aa9
Branch: refs/heads/feature/GEODE-2632-17
Commit: c5962aa9308764bb964e4b4160e969f2dfae062d
Parents: 3ce3437
Author: Ken Howe <kh...@pivotal.io>
Authored: Mon May 15 15:00:00 2017 -0700
Committer: Ken Howe <kh...@pivotal.io>
Committed: Tue May 23 08:16:17 2017 -0700
----------------------------------------------------------------------
.../cli/commands/ExportLogsCommand.java | 199 ++++++++-----------
.../cli/functions/ExportLogsFunction.java | 3 +-
.../cli/functions/ExportedLogsSizeInfo.java | 105 ----------
.../cli/functions/SizeExportLogsFunction.java | 29 ++-
.../internal/cli/i18n/CliStrings.java | 2 +-
.../internal/cli/util/LogExporter.java | 63 +++++-
.../management/internal/cli/util/LogSizer.java | 118 -----------
.../cli/commands/ExportLogsCommandTest.java | 121 ++---------
.../cli/commands/ExportLogsDUnitTest.java | 21 +-
.../commands/ExportLogsFileSizeLimitTest.java | 4 +-
.../cli/commands/ExportLogsTestSuite.java | 10 +-
.../cli/functions/ExportedLogsSizeInfoTest.java | 133 -------------
.../SizeExportLogsFunctionCacheTest.java | 174 ----------------
.../functions/SizeExportLogsFunctionTest.java | 178 +++++++++++++++++
.../cli/functions/SizeExportLogsTestSuite.java | 29 ---
.../internal/cli/util/LogExporterTest.java | 6 +-
.../internal/cli/util/LogSizerTest.java | 17 +-
17 files changed, 376 insertions(+), 836 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/geode/blob/c5962aa9/geode-core/src/main/java/org/apache/geode/management/internal/cli/commands/ExportLogsCommand.java
----------------------------------------------------------------------
diff --git a/geode-core/src/main/java/org/apache/geode/management/internal/cli/commands/ExportLogsCommand.java b/geode-core/src/main/java/org/apache/geode/management/internal/cli/commands/ExportLogsCommand.java
index af681da..ab93f94 100644
--- a/geode-core/src/main/java/org/apache/geode/management/internal/cli/commands/ExportLogsCommand.java
+++ b/geode-core/src/main/java/org/apache/geode/management/internal/cli/commands/ExportLogsCommand.java
@@ -44,7 +44,6 @@ import org.apache.geode.management.cli.ConverterHint;
import org.apache.geode.management.cli.Result;
import org.apache.geode.management.internal.cli.CliUtil;
import org.apache.geode.management.internal.cli.functions.ExportLogsFunction;
-import org.apache.geode.management.internal.cli.functions.ExportedLogsSizeInfo;
import org.apache.geode.management.internal.cli.functions.SizeExportLogsFunction;
import org.apache.geode.management.internal.cli.i18n.CliStrings;
import org.apache.geode.management.internal.cli.result.ResultBuilder;
@@ -65,7 +64,7 @@ public class ExportLogsCommand implements CommandMarker {
private static final Pattern DISK_SPACE_LIMIT_PATTERN = Pattern.compile("(\\d+)([kmgtKMGT]?)");
- private InternalCache getCache() {
+ InternalCache getCache() {
return (InternalCache) CacheFactory.getAnyInstance();
}
@@ -129,106 +128,88 @@ public class ExportLogsCommand implements CommandMarker {
List<Object> results = (List<Object>) estimateLogSize(args, server).getResult();
long estimatedSize = 0;
- long diskAvailable = 0;
- long diskSize = 0;
if (!results.isEmpty()) {
List<?> res = (List<?>) results.get(0);
- if (res.get(0) instanceof ExportedLogsSizeInfo) {
- ExportedLogsSizeInfo sizeInfo = (ExportedLogsSizeInfo) res.get(0);
- estimatedSize = sizeInfo.getLogsSize();
- diskAvailable = sizeInfo.getDiskAvailable();
- diskSize = sizeInfo.getDiskSize();
+ if (res.get(0) instanceof Long) {
+ estimatedSize = (Long) res.get(0);
}
}
logger.info("Received estimated export size from member {}: {}", server.getId(),
estimatedSize);
totalEstimatedExportSize += estimatedSize;
-
- // If export size checking is enabled, then estimated size on each member shouldn't exceed
- // the available disk on that member
- try {
- isSizeCheckEnabledAndWithinDiskSpaceOfMember(server.getName(),
- parseFileSizeLimit(fileSizeLimit), estimatedSize, diskAvailable, diskSize);
- } catch (ManagementException e) {
- return ResultBuilder.createUserErrorResult(e.getMessage());
- }
}
// The sum of the estimated export sizes from each member should not exceed the
- // disk availble on the locator
+ // disk available on the locator
try {
- isSizeCheckEnabledAndWithinDiskSpaceOfMember("locator", parseFileSizeLimit(fileSizeLimit),
- totalEstimatedExportSize, getLocalDiskAvailable(), getLocalDiskSize());
+ sizeCheckIsEnabledAndWithinDiskSpaceOfMember("locator", parseFileSizeLimit(fileSizeLimit),
+ totalEstimatedExportSize, getLocalDiskAvailable());
} catch (ManagementException e) {
return ResultBuilder.createUserErrorResult(e.getMessage());
}
}
- if (testhookSkipExports()) {
- result = ResultBuilder.createInfoResult("Estimated size of exported logs is "
- + new BytesToString().of(totalEstimatedExportSize));
- } else {
- // get zipped files from all servers next
- Map<String, Path> zipFilesFromMembers = new HashMap<>();
- for (DistributedMember server : targetMembers) {
- Region region = ExportLogsFunction.createOrGetExistingExportLogsRegion(true, cache);
+ // get zipped files from all servers next
+ Map<String, Path> zipFilesFromMembers = new HashMap<>();
+ for (DistributedMember server : targetMembers) {
+ Region region = ExportLogsFunction.createOrGetExistingExportLogsRegion(true, cache);
- ExportLogsCacheWriter cacheWriter =
- (ExportLogsCacheWriter) region.getAttributes().getCacheWriter();
+ ExportLogsCacheWriter cacheWriter =
+ (ExportLogsCacheWriter) region.getAttributes().getCacheWriter();
- cacheWriter.startFile(server.getName());
+ cacheWriter.startFile(server.getName());
- CliUtil.executeFunction(new ExportLogsFunction(),
- new ExportLogsFunction.Args(start, end, logLevel, onlyLogLevel, logsOnly, statsOnly),
- server).getResult();
- Path zipFile = cacheWriter.endFile();
- ExportLogsFunction.destroyExportLogsRegion(cache);
-
- // only put the zipfile in the map if it is not null
- if (zipFile != null) {
- logger.info("Received zip file from member {}: {}", server.getId(), zipFile);
- zipFilesFromMembers.put(server.getId(), zipFile);
- }
- }
+ CliUtil.executeFunction(new ExportLogsFunction(),
+ new ExportLogsFunction.Args(start, end, logLevel, onlyLogLevel, logsOnly, statsOnly),
+ server).getResult();
+ Path zipFile = cacheWriter.endFile();
+ ExportLogsFunction.destroyExportLogsRegion(cache);
- if (zipFilesFromMembers.isEmpty()) {
- return ResultBuilder.createUserErrorResult("No files to be exported.");
+ // only put the zipfile in the map if it is not null
+ if (zipFile != null) {
+ logger.info("Received zip file from member {}: {}", server.getId(), zipFile);
+ zipFilesFromMembers.put(server.getId(), zipFile);
}
+ }
- Path tempDir = Files.createTempDirectory("exportedLogs");
- // make sure the directory is created, so that even if there is no files unzipped to this
- // dir, we can still zip it and send an empty zip file back to the client
- Path exportedLogsDir = tempDir.resolve("exportedLogs");
- FileUtils.forceMkdir(exportedLogsDir.toFile());
-
- for (Path zipFile : zipFilesFromMembers.values()) {
- Path unzippedMemberDir =
- exportedLogsDir.resolve(zipFile.getFileName().toString().replace(".zip", ""));
- ZipUtils.unzip(zipFile.toAbsolutePath().toString(), unzippedMemberDir.toString());
- FileUtils.deleteQuietly(zipFile.toFile());
- }
+ if (zipFilesFromMembers.isEmpty()) {
+ return ResultBuilder.createUserErrorResult("No files to be exported.");
+ }
- Path dirPath;
- if (StringUtils.isBlank(dirName)) {
- dirPath = Paths.get(System.getProperty("user.dir"));
- } else {
- dirPath = Paths.get(dirName);
- }
- Path exportedLogsZipFile =
- dirPath.resolve("exportedLogs_" + System.currentTimeMillis() + ".zip").toAbsolutePath();
+ Path tempDir = Files.createTempDirectory("exportedLogs");
+ // make sure the directory is created, so that even if there is no files unzipped to this
+ // dir, we can still zip it and send an empty zip file back to the client
+ Path exportedLogsDir = tempDir.resolve("exportedLogs");
+ FileUtils.forceMkdir(exportedLogsDir.toFile());
+
+ for (Path zipFile : zipFilesFromMembers.values()) {
+ Path unzippedMemberDir =
+ exportedLogsDir.resolve(zipFile.getFileName().toString().replace(".zip", ""));
+ ZipUtils.unzip(zipFile.toAbsolutePath().toString(), unzippedMemberDir.toString());
+ FileUtils.deleteQuietly(zipFile.toFile());
+ }
- logger.info("Zipping into: " + exportedLogsZipFile.toString());
- ZipUtils.zipDirectory(exportedLogsDir, exportedLogsZipFile);
- try {
- isFileSizeCheckEnabledAndWithinLimit(parseFileSizeLimit(fileSizeLimit),
- exportedLogsZipFile.toFile());
- } catch (ManagementException e) {
- return ResultBuilder.createUserErrorResult(e.getMessage());
- } finally {
- FileUtils.deleteDirectory(tempDir.toFile());
- }
- result = ResultBuilder.createInfoResult(exportedLogsZipFile.toString());
+ Path dirPath;
+ if (StringUtils.isBlank(dirName)) {
+ dirPath = Paths.get(System.getProperty("user.dir"));
+ } else {
+ dirPath = Paths.get(dirName);
+ }
+ Path exportedLogsZipFile =
+ dirPath.resolve("exportedLogs_" + System.currentTimeMillis() + ".zip").toAbsolutePath();
+
+ logger.info("Zipping into: " + exportedLogsZipFile.toString());
+ ZipUtils.zipDirectory(exportedLogsDir, exportedLogsZipFile);
+ try {
+ isFileSizeCheckEnabledAndWithinLimit(parseFileSizeLimit(fileSizeLimit),
+ exportedLogsZipFile.toFile());
+ } catch (ManagementException e) {
+ FileUtils.deleteQuietly(exportedLogsZipFile.toFile());
+ return ResultBuilder.createUserErrorResult(e.getMessage());
+ } finally {
+ FileUtils.deleteDirectory(tempDir.toFile());
}
+ result = ResultBuilder.createInfoResult(exportedLogsZipFile.toString());
} catch (Exception ex) {
logger.error(ex.getMessage(), ex);
result = ResultBuilder.createGemFireErrorResult(ex.getMessage());
@@ -240,15 +221,6 @@ public class ExportLogsCommand implements CommandMarker {
}
/**
- * Test hook for unit testing. To limit scope of test to only estimate size of exports (i.e. skip
- * the filtering and exporting logs & stats from cluster members), stub this method to return true
- * to skip exporting.
- */
- boolean testhookSkipExports() {
- return false;
- }
-
- /**
* Wrapper to enable stubbing of static method call for unit testing
*/
Set<DistributedMember> getMembers(String[] groups, String[] memberIds) {
@@ -292,47 +264,38 @@ public class ExportLogsCommand implements CommandMarker {
/**
* Throws ManagementException if file size is over fileSizeLimit bytes
- *
- * @return false == limit is zero (checking disabled)<br>
- * true == file size is less than limit<br>
- * exception == file size is over limit
*/
- boolean isFileSizeCheckEnabledAndWithinLimit(long fileSizeLimitBytes, File file) {
- if (fileSizeLimitBytes < 1) {
- // size checks disabled
- return false;
- }
- if (FileUtils.sizeOf(file) < fileSizeLimitBytes) {
- return true;
+ void isFileSizeCheckEnabledAndWithinLimit(long fileSizeLimitBytes, File file) {
+ if (fileSizeLimitBytes > 0) {
+ if (FileUtils.sizeOf(file) > fileSizeLimitBytes) {
+ StringBuilder sb = new StringBuilder();
+ sb.append("Exported logs zip file size = ").append(FileUtils.sizeOf(file)).append(", ")
+ .append(CliStrings.EXPORT_LOGS__FILESIZELIMIT).append(" = ").append(fileSizeLimitBytes)
+ .append(
+ ". To disable exported logs file size check use option \"--file-size-limit=0\".");
+ throw new ManagementException(sb.toString()); // FileTooBigException
+ }
}
- StringBuilder sb = new StringBuilder();
- sb.append("Exported logs zip file size = ").append(FileUtils.sizeOf(file)).append(", ")
- .append(CliStrings.EXPORT_LOGS__FILESIZELIMIT).append(" = ").append(fileSizeLimitBytes)
- .append(". To disable exported logs file size check use option \"--file-size-limit=0\".");
- throw new ManagementException(sb.toString()); // FileTooBigException
}
+
/**
* Throws ManagementException if export file size checking is enabled and the space required on a
* cluster member to filter and zip up files to be exported exceeds the disk space available
*/
- boolean isSizeCheckEnabledAndWithinDiskSpaceOfMember(String memberName, long fileSizeLimitBytes,
- long estimatedSize, long diskAvailable, long diskSize) {
- // TODO:GEODE-2420: warn user if exportedLogs filtering will exceed disk available
- if (fileSizeLimitBytes < 1) {
- // size checks disabled
- return false;
- }
- StringBuilder sb = new StringBuilder();
- BytesToString bytesToString = new BytesToString();
- if (estimatedSize > diskAvailable) {
- sb.append("Estimated disk space required (").append(bytesToString.of(estimatedSize))
- .append(") to consolidate logs on member ").append(memberName)
- .append(" will exceed available disk space (").append(bytesToString.of(diskAvailable))
- .append(")");
- throw new ManagementException(sb.toString()); // FileTooBigException
+ void sizeCheckIsEnabledAndWithinDiskSpaceOfMember(String memberName, long fileSizeLimitBytes,
+ long estimatedSize, long diskAvailable) {
+ if (fileSizeLimitBytes > 0) {
+ StringBuilder sb = new StringBuilder();
+ BytesToString bytesToString = new BytesToString();
+ if (estimatedSize > diskAvailable) {
+ sb.append("Estimated disk space required (").append(bytesToString.of(estimatedSize))
+ .append(") to consolidate logs on member ").append(memberName)
+ .append(" will exceed available disk space (").append(bytesToString.of(diskAvailable))
+ .append(")");
+ throw new ManagementException(sb.toString()); // FileTooBigException
+ }
}
- return true;
}
static int parseSize(String diskSpaceLimit) {
http://git-wip-us.apache.org/repos/asf/geode/blob/c5962aa9/geode-core/src/main/java/org/apache/geode/management/internal/cli/functions/ExportLogsFunction.java
----------------------------------------------------------------------
diff --git a/geode-core/src/main/java/org/apache/geode/management/internal/cli/functions/ExportLogsFunction.java b/geode-core/src/main/java/org/apache/geode/management/internal/cli/functions/ExportLogsFunction.java
index 663a08e..86b506e 100644
--- a/geode-core/src/main/java/org/apache/geode/management/internal/cli/functions/ExportLogsFunction.java
+++ b/geode-core/src/main/java/org/apache/geode/management/internal/cli/functions/ExportLogsFunction.java
@@ -125,8 +125,7 @@ public class ExportLogsFunction implements Function, InternalEntity {
Region exportLogsRegion = cache.getRegion(EXPORT_LOGS_REGION);
if (exportLogsRegion == null) {
- AttributesFactory<String, Configuration> regionAttrsFactory =
- new AttributesFactory<String, Configuration>();
+ AttributesFactory<String, Configuration> regionAttrsFactory = new AttributesFactory<>();
regionAttrsFactory.setDataPolicy(DataPolicy.EMPTY);
regionAttrsFactory.setScope(Scope.DISTRIBUTED_ACK);
http://git-wip-us.apache.org/repos/asf/geode/blob/c5962aa9/geode-core/src/main/java/org/apache/geode/management/internal/cli/functions/ExportedLogsSizeInfo.java
----------------------------------------------------------------------
diff --git a/geode-core/src/main/java/org/apache/geode/management/internal/cli/functions/ExportedLogsSizeInfo.java b/geode-core/src/main/java/org/apache/geode/management/internal/cli/functions/ExportedLogsSizeInfo.java
deleted file mode 100644
index c175e1a..0000000
--- a/geode-core/src/main/java/org/apache/geode/management/internal/cli/functions/ExportedLogsSizeInfo.java
+++ /dev/null
@@ -1,105 +0,0 @@
-/*
- * 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;
-import java.util.Objects;
-
-public class ExportedLogsSizeInfo implements DataSerializable {
- private long logsSize;
- private long diskAvailable;
- private long diskSize;
-
- // Used for deserialization only
- public ExportedLogsSizeInfo() {
- logsSize = 0;
- diskAvailable = 0;
- diskSize = 0;
- }
-
- public ExportedLogsSizeInfo(long logsSize, long diskAvailable, long diskSize) {
- this.logsSize = logsSize;
- this.diskAvailable = diskAvailable;
- this.diskSize = diskSize;
- }
-
- public long getDiskSize() {
- return diskSize;
- }
-
- public long getDiskAvailable() {
- return diskAvailable;
- }
-
- public long getLogsSize() {
-
- return logsSize;
- }
-
- @Override
- public boolean equals(Object o) {
- if (this == o) {
- return true;
- }
- if (o == null || getClass() != o.getClass()) {
- return false;
- }
-
- ExportedLogsSizeInfo that = (ExportedLogsSizeInfo) o;
-
- if (logsSize != that.logsSize) {
- return false;
- }
- if (diskAvailable != that.diskAvailable) {
- return false;
- }
- return diskSize == that.diskSize;
- }
-
- @Override
- public int hashCode() {
- return Objects.hash(logsSize, diskAvailable, diskSize);
- }
-
- @Override
- public void toData(DataOutput out) throws IOException {
- DataSerializer.writeLong(logsSize, out);
- DataSerializer.writeLong(diskAvailable, out);
- DataSerializer.writeLong(diskSize, out);
- }
-
- @Override
- public void fromData(DataInput in) throws IOException, ClassNotFoundException {
- logsSize = DataSerializer.readLong(in);
- diskAvailable = DataSerializer.readLong(in);
- diskSize = DataSerializer.readLong(in);
- }
-
- @Override
- public String toString() {
- StringBuilder result = new StringBuilder();
- result.append("[");
- result.append("logsSize: " + logsSize);
- result.append(", diskAvailable: " + diskAvailable);
- result.append(", diskSize: " + diskSize);
- result.append("]");
- return result.toString();
- }
-}
http://git-wip-us.apache.org/repos/asf/geode/blob/c5962aa9/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 3d98fe9..57355c0 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
@@ -16,9 +16,11 @@ package org.apache.geode.management.internal.cli.functions;
import java.io.File;
import java.io.IOException;
-import java.text.ParseException;
import java.util.Arrays;
+import org.apache.geode.management.ManagementException;
+import org.apache.geode.management.internal.cli.util.BytesToString;
+import org.apache.geode.management.internal.cli.util.LogExporter;
import org.apache.logging.log4j.Logger;
import org.apache.geode.cache.execute.Function;
@@ -30,7 +32,6 @@ import org.apache.geode.internal.cache.GemFireCacheImpl;
import org.apache.geode.internal.cache.InternalCache;
import org.apache.geode.internal.logging.LogService;
import org.apache.geode.management.internal.cli.util.LogFilter;
-import org.apache.geode.management.internal.cli.util.LogSizer;
public class SizeExportLogsFunction extends ExportLogsFunction implements Function, InternalEntity {
private static final Logger LOGGER = LogService.getLogger();
@@ -42,13 +43,20 @@ public class SizeExportLogsFunction extends ExportLogsFunction implements Functi
InternalCache cache = GemFireCacheImpl.getInstance();
DistributionConfig config = cache.getInternalDistributedSystem().getConfig();
Args args = (Args) context.getArguments();
- long diskAvailable = config.getLogFile().getUsableSpace();
- long diskSize = config.getLogFile().getTotalSpace();
+ long diskAvailable = getDiskAvailable(config);
long estimatedSize = estimateLogFileSize(cache.getMyId(), config.getLogFile(),
config.getStatisticArchiveFile(), args);
- context.getResultSender().lastResult(
- Arrays.asList(new ExportedLogsSizeInfo(estimatedSize, diskAvailable, diskSize)));
+ BytesToString bytesToString = new BytesToString();
+ if (estimatedSize == 0 || estimatedSize < diskAvailable) {
+ context.getResultSender().lastResult(Arrays.asList(estimatedSize));
+ } else {
+ StringBuilder sb = new StringBuilder().append("Estimated disk space required (")
+ .append(bytesToString.of(estimatedSize)).append(") to consolidate logs on member ")
+ .append(cache.getName()).append(" will exceed available disk space (")
+ .append(bytesToString.of(diskAvailable)).append(")");
+ context.getResultSender().sendException(new ManagementException(sb.toString())); // FileTooBigException
+ }
} catch (Exception e) {
e.printStackTrace();
@@ -57,8 +65,12 @@ public class SizeExportLogsFunction extends ExportLogsFunction implements Functi
}
}
+ long getDiskAvailable(DistributionConfig config) {
+ return config.getLogFile().getUsableSpace();
+ }
+
long estimateLogFileSize(final DistributedMember member, final File logFile,
- final File statArchive, final Args args) throws ParseException, IOException {
+ final File statArchive, final Args args) throws IOException {
if (LOGGER.isDebugEnabled()) {
LOGGER.debug("SizeExportLogsFunction started for member {}", member);
}
@@ -76,7 +88,8 @@ public class SizeExportLogsFunction extends ExportLogsFunction implements Functi
LogFilter logFilter = new LogFilter(args.getLogLevel(), args.isThisLogLevelOnly(),
args.getStartTime(), args.getEndTime());
- long estimatedSize = new LogSizer(logFilter, baseLogFile, baseStatsFile).getFilteredSize();
+ long estimatedSize =
+ new LogExporter(logFilter, baseLogFile, baseStatsFile).estimateFilteredSize();
LOGGER.info("Estimated log file size: " + estimatedSize);
http://git-wip-us.apache.org/repos/asf/geode/blob/c5962aa9/geode-core/src/main/java/org/apache/geode/management/internal/cli/i18n/CliStrings.java
----------------------------------------------------------------------
diff --git a/geode-core/src/main/java/org/apache/geode/management/internal/cli/i18n/CliStrings.java b/geode-core/src/main/java/org/apache/geode/management/internal/cli/i18n/CliStrings.java
index 68d055c..cbeee99 100644
--- a/geode-core/src/main/java/org/apache/geode/management/internal/cli/i18n/CliStrings.java
+++ b/geode-core/src/main/java/org/apache/geode/management/internal/cli/i18n/CliStrings.java
@@ -1441,7 +1441,7 @@ public class CliStrings {
public static final String EXPORT_LOGS__STATSONLY__HELP = "Whether to only export statistics";
public static final String EXPORT_LOGS__FILESIZELIMIT = "file-size-limit";
public static final String EXPORT_LOGS__FILESIZELIMIT__HELP =
- "Limits size of the file that can be exported. Specify zero for no limit. Value is in megabytes by default or [m|g|t] may be specified.";
+ "Limits size of the file that can be exported. Specify zero for no limit. Value is in megabytes by default or [k|m|g|t] may be specified.";
public static final String EXPORT_LOGS__FILESIZELIMIT__SPECIFIED_DEFAULT = "0";
public static final String EXPORT_LOGS__FILESIZELIMIT__UNSPECIFIED_DEFAULT = "100m";
http://git-wip-us.apache.org/repos/asf/geode/blob/c5962aa9/geode-core/src/main/java/org/apache/geode/management/internal/cli/util/LogExporter.java
----------------------------------------------------------------------
diff --git a/geode-core/src/main/java/org/apache/geode/management/internal/cli/util/LogExporter.java b/geode-core/src/main/java/org/apache/geode/management/internal/cli/util/LogExporter.java
index a0be7fb..5802f79 100644
--- a/geode-core/src/main/java/org/apache/geode/management/internal/cli/util/LogExporter.java
+++ b/geode-core/src/main/java/org/apache/geode/management/internal/cli/util/LogExporter.java
@@ -31,7 +31,7 @@ import java.io.FileWriter;
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.function.Predicate;
import java.util.stream.Stream;
@@ -51,10 +51,8 @@ public class LogExporter {
* @param logFilter the filter that's used to check if we need to accept the file or the logLine
* @param baseLogFile if not null, we will export the logs in that directory
* @param baseStatsFile if not null, we will export stats in that directory
- * @throws ParseException
*/
- public LogExporter(LogFilter logFilter, File baseLogFile, File baseStatsFile)
- throws ParseException {
+ public LogExporter(LogFilter logFilter, File baseLogFile, File baseStatsFile) {
assert logFilter != null;
this.logFilter = logFilter;
this.baseLogFile = baseLogFile;
@@ -65,7 +63,6 @@ public class LogExporter {
*
* @return Path to the zip file that has all the filtered files, null if no files are selected to
* export.
- * @throws IOException
*/
public Path export() throws IOException {
Path tempDirectory = Files.createTempDirectory("exportLogs");
@@ -127,24 +124,68 @@ public class LogExporter {
}
}
- protected List<Path> findLogFiles(Path workingDir) throws IOException {
+ /**
+ * @return combined size of stat archives and filtered log files in bytes
+ */
+ public long estimateFilteredSize() throws IOException {
+ long filteredSize = 0;
+ if (baseLogFile != null) {
+ for (Path logFile : findLogFiles(baseLogFile.toPath().getParent())) {
+ filteredSize += filterAndSize(logFile);
+ }
+ }
+
+ if (baseStatsFile != null) {
+ for (Path statFile : findStatFiles(baseStatsFile.toPath().getParent())) {
+ filteredSize += statFile.toFile().length();
+ }
+ }
+
+ return filteredSize;
+ }
+
+ /**
+ * @return size of file in bytes
+ */
+ private long filterAndSize(Path originalLogFile) throws IOException {
+ long size = 0;
+ this.logFilter.startNewFile();
+
+ try (BufferedReader reader = new BufferedReader(new FileReader(originalLogFile.toFile()))) {
+ String line;
+ while ((line = reader.readLine()) != null) {
+ LogFilter.LineFilterResult result = this.logFilter.acceptsLine(line);
+
+ if (result == LogFilter.LineFilterResult.REMAINDER_OF_FILE_REJECTED) {
+ break;
+ }
+ if (result == LogFilter.LineFilterResult.LINE_ACCEPTED) {
+ size += line.length() + File.separator.length();
+ }
+ }
+ }
+ return size;
+ }
+
+ List<Path> findLogFiles(Path workingDir) throws IOException {
Predicate<Path> logFileSelector = (Path file) -> file.toString().toLowerCase().endsWith(".log");
return findFiles(workingDir, logFileSelector);
}
- protected List<Path> findStatFiles(Path workingDir) throws IOException {
+ List<Path> findStatFiles(Path workingDir) throws IOException {
Predicate<Path> statFileSelector =
(Path file) -> file.toString().toLowerCase().endsWith(".gfs");
return findFiles(workingDir, statFileSelector);
}
private List<Path> findFiles(Path workingDir, Predicate<Path> fileSelector) throws IOException {
- Stream<Path> selectedFiles =
- Files.list(workingDir).filter(fileSelector).filter(this.logFilter::acceptsFile);
+ 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/c5962aa9/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
deleted file mode 100644
index f1adae6..0000000
--- a/geode-core/src/main/java/org/apache/geode/management/internal/cli/util/LogSizer.java
+++ /dev/null
@@ -1,118 +0,0 @@
-/*
- * 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.util.stream.Collectors.toList;
-
-import org.apache.geode.internal.logging.LogService;
-import org.apache.logging.log4j.Logger;
-
-import java.io.File;
-import java.io.FileNotFoundException;
-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;
-import java.util.stream.Stream;
-
-public class LogSizer {
- private static final Logger LOGGER = LogService.getLogger();
-
- private final LogFilter logFilter;
- private final File baseLogFile;
- private final File baseStatsFile;
-
- private long filteredSize;
-
- /**
- * @param logFilter the filter that's used to check if we need to accept the file or the logLine
- * @param baseLogFile if not null, we will estimate the additional disk space required to filter
- * and export the logs in that directory
- * @param baseStatsFile if not null, we will estimate the additional disk space required to filter
- * and export the stats in that directory
- */
- public LogSizer(LogFilter logFilter, File baseLogFile, File baseStatsFile) throws ParseException {
- assert logFilter != null;
- this.logFilter = logFilter;
- this.baseLogFile = baseLogFile;
- this.baseStatsFile = baseStatsFile;
- filteredSize = 0;
- }
-
- /**
- * @return combined size of stat archives and filtered log files in bytes
- */
- public long getFilteredSize() throws IOException {
-
- if (baseLogFile != null) {
- for (Path logFile : findLogFiles(baseLogFile.toPath().getParent())) {
- filteredSize += filterAndSize(logFile);
- }
- }
-
- if (baseStatsFile != null) {
- for (Path statFile : findStatFiles(baseStatsFile.toPath().getParent())) {
- filteredSize += statFile.toFile().length();
- }
- }
-
- return filteredSize;
- }
-
- /**
- * @return size of file in bytes
- */
- protected long filterAndSize(Path originalLogFile) throws FileNotFoundException {
- long size = 0;
- Scanner in = new Scanner(originalLogFile.toFile());
- while (in.hasNextLine()) {
- String line = in.nextLine();
-
- LogFilter.LineFilterResult result = this.logFilter.acceptsLine(line);
-
- if (result == LogFilter.LineFilterResult.REMAINDER_OF_FILE_REJECTED) {
- break;
- }
- size += line.length() + File.separator.length();
- }
- return size;
- }
-
- protected List<Path> findLogFiles(Path workingDir) throws IOException {
- Predicate<Path> logFileSelector = (Path file) -> file.toString().toLowerCase().endsWith(".log");
- return findFiles(workingDir, logFileSelector);
- }
-
-
- protected List<Path> findStatFiles(Path workingDir) throws IOException {
- Predicate<Path> statFileSelector =
- (Path file) -> file.toString().toLowerCase().endsWith(".gfs");
- return findFiles(workingDir, statFileSelector);
- }
-
- 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/c5962aa9/geode-core/src/test/java/org/apache/geode/management/internal/cli/commands/ExportLogsCommandTest.java
----------------------------------------------------------------------
diff --git a/geode-core/src/test/java/org/apache/geode/management/internal/cli/commands/ExportLogsCommandTest.java b/geode-core/src/test/java/org/apache/geode/management/internal/cli/commands/ExportLogsCommandTest.java
index 2b7839a..8888a91 100644
--- a/geode-core/src/test/java/org/apache/geode/management/internal/cli/commands/ExportLogsCommandTest.java
+++ b/geode-core/src/test/java/org/apache/geode/management/internal/cli/commands/ExportLogsCommandTest.java
@@ -28,10 +28,9 @@ import org.apache.geode.cache.execute.FunctionException;
import org.apache.geode.cache.execute.ResultCollector;
import org.apache.geode.distributed.DistributedMember;
import org.apache.geode.distributed.internal.membership.InternalDistributedMember;
-import org.apache.geode.internal.cache.GemFireCacheImpl;
+import org.apache.geode.internal.cache.InternalCache;
import org.apache.geode.management.ManagementException;
import org.apache.geode.management.cli.Result;
-import org.apache.geode.management.internal.cli.functions.ExportedLogsSizeInfo;
import org.apache.geode.management.internal.cli.functions.SizeExportLogsFunction;
import org.apache.geode.test.junit.categories.UnitTest;
import org.junit.Test;
@@ -125,122 +124,38 @@ public class ExportLogsCommandTest {
public void sizeTooBigOnMember_sizeChecksDisabled_returnsFalse() throws Exception {
final Cache mockCache = mock(Cache.class);
final DistributedMember mockDistributedMember = mock(DistributedMember.class);
- final Execution mockFuntionExecutor = mock(Execution.class);
+ final Execution mockFunctionExecutor = mock(Execution.class);
final ExportLogsCommand cmd =
- createExportLogsCommand(mockCache, mockDistributedMember, mockFuntionExecutor);
- assertThat(cmd.isSizeCheckEnabledAndWithinDiskSpaceOfMember("clusterMember", 0, MEGABYTE + 1024,
- MEGABYTE, TERABYTE)).isFalse();
+ createExportLogsCommand(mockCache, mockDistributedMember, mockFunctionExecutor);
+ cmd.sizeCheckIsEnabledAndWithinDiskSpaceOfMember("clusterMember", 0, MEGABYTE + 1024, MEGABYTE);
}
@Test
- public void sizeOKOnMember_sizeChecksEnabled_returnsTrue() throws Exception {
+ public void sizeOKOnMember_sizeChecksEnabled_doesNotThrow() throws Exception {
final Cache mockCache = mock(Cache.class);
final DistributedMember mockDistributedMember = mock(DistributedMember.class);
- final Execution mockFuntionExecutor = mock(Execution.class);
+ final Execution mockFunctionExecutor = mock(Execution.class);
final ExportLogsCommand cmd =
- createExportLogsCommand(mockCache, mockDistributedMember, mockFuntionExecutor);
- assertThat(cmd.isSizeCheckEnabledAndWithinDiskSpaceOfMember("clusterMember", 10 * MEGABYTE,
- MEGABYTE - 1024, MEGABYTE, TERABYTE)).isTrue();
+ createExportLogsCommand(mockCache, mockDistributedMember, mockFunctionExecutor);
+ cmd.sizeCheckIsEnabledAndWithinDiskSpaceOfMember("clusterMember", 10 * MEGABYTE,
+ MEGABYTE - 1024, MEGABYTE);
}
@Test
public void sizeTooBigOnMember_sizeChecksEnabled_shouldThrow() throws Exception {
final Cache mockCache = mock(Cache.class);
final DistributedMember mockDistributedMember = mock(DistributedMember.class);
- final Execution mockFuntionExecutor = mock(Execution.class);
+ final Execution mockFunctionExecutor = mock(Execution.class);
final ExportLogsCommand cmd =
- createExportLogsCommand(mockCache, mockDistributedMember, mockFuntionExecutor);
- assertThatThrownBy(() -> cmd.isSizeCheckEnabledAndWithinDiskSpaceOfMember("clusterMember",
- 10 * MEGABYTE, MEGABYTE + 1024, MEGABYTE, TERABYTE))
- .isInstanceOf(ManagementException.class);
- }
-
- @Test
- public void sizeFromMember_withinLimits() throws Exception {
- final GemFireCacheImpl mockCache = mock(GemFireCacheImpl.class);
- final ExportLogsCommand realCmd = new ExportLogsCommand();
-
- ExportLogsCommand spyCmd = spy(realCmd);
- String start = null;
- String end = null;
- String logLevel = null;
- boolean onlyLogLevel = false;
- boolean logsOnly = false;
- boolean statsOnly = false;
-
- InternalDistributedMember member1 = new InternalDistributedMember("member1", 12345);
- InternalDistributedMember member2 = new InternalDistributedMember("member2", 98765);
- member1.getNetMember().setName("member1");
- member2.getNetMember().setName("member2");
- Set<DistributedMember> testMembers = new HashSet<>();
- testMembers.add(member1);
- testMembers.add(member2);
-
- ResultCollector testResults1 = new CustomCollector();
- testResults1.addResult(member1,
- Arrays.asList(new ExportedLogsSizeInfo(MEGABYTE, 2 * MEGABYTE, TERABYTE)));
- ResultCollector testResults2 = new CustomCollector();
- testResults2.addResult(member2,
- Arrays.asList(new ExportedLogsSizeInfo(2 * MEGABYTE, 2 * MEGABYTE, TERABYTE)));
-
- doReturn(mockCache).when(spyCmd).getCache();
- doReturn(testMembers).when(spyCmd).getMembers(null, null);
- doReturn(testResults1).when(spyCmd)
- .estimateLogSize(Matchers.any(SizeExportLogsFunction.Args.class), eq(member1));
- doReturn(testResults2).when(spyCmd)
- .estimateLogSize(Matchers.any(SizeExportLogsFunction.Args.class), eq(member2));
- doReturn(true).when(spyCmd).testhookSkipExports();
-
- Result res = spyCmd.exportLogs("working dir", null, null, logLevel, onlyLogLevel, false, start,
- end, logsOnly, statsOnly, "1g");
- assertThat(res.getStatus()).isEqualTo(Result.Status.OK);
- }
-
- @Test
- public void sizeFromMember_greaterThanDiskAvailable_shouldReturnErrorResult() throws Exception {
- final GemFireCacheImpl mockCache = mock(GemFireCacheImpl.class);
- final ExportLogsCommand realCmd = new ExportLogsCommand();
- ExportLogsCommand spyCmd = spy(realCmd);
-
- String start = null;
- String end = null;
- String logLevel = null;
- boolean onlyLogLevel = false;
- boolean logsOnly = false;
- boolean statsOnly = false;
-
- InternalDistributedMember member1 = new InternalDistributedMember("member1", 12345);
- InternalDistributedMember member2 = new InternalDistributedMember("member2", 98765);
- member1.getNetMember().setName("member1");
- member2.getNetMember().setName("member2");
- Set<DistributedMember> testMembers = new HashSet<>();
- testMembers.add(member1);
- testMembers.add(member2);
-
- ResultCollector testResults1 = new CustomCollector();
- testResults1.addResult(member1,
- Arrays.asList(new ExportedLogsSizeInfo(2 * MEGABYTE, MEGABYTE, TERABYTE)));
- ResultCollector testResults2 = new CustomCollector();
- testResults2.addResult(member2,
- Arrays.asList(new ExportedLogsSizeInfo(2 * MEGABYTE, 2 * MEGABYTE, TERABYTE)));
-
- doReturn(mockCache).when(spyCmd).getCache();
- doReturn(testMembers).when(spyCmd).getMembers(null, null);
- doReturn(testResults1).when(spyCmd)
- .estimateLogSize(Matchers.any(SizeExportLogsFunction.Args.class), eq(member1));
- doReturn(testResults2).when(spyCmd)
- .estimateLogSize(Matchers.any(SizeExportLogsFunction.Args.class), eq(member2));
- doReturn(true).when(spyCmd).testhookSkipExports();
-
- Result res = spyCmd.exportLogs("working dir", null, null, logLevel, onlyLogLevel, false, start,
- end, logsOnly, statsOnly, "1g");
- assertThat(res.getStatus()).isEqualTo(Result.Status.ERROR);
+ createExportLogsCommand(mockCache, mockDistributedMember, mockFunctionExecutor);
+ assertThatThrownBy(() -> cmd.sizeCheckIsEnabledAndWithinDiskSpaceOfMember("clusterMember",
+ 10 * MEGABYTE, MEGABYTE + 1024, MEGABYTE)).isInstanceOf(ManagementException.class);
}
@Test
public void sizeFromAllMembers_greaterThanLocalDiskAvailable_shouldReturnErrorResult()
throws Exception {
- final GemFireCacheImpl mockCache = mock(GemFireCacheImpl.class);
+ final InternalCache mockCache = mock(InternalCache.class);
final ExportLogsCommand realCmd = new ExportLogsCommand();
ExportLogsCommand spyCmd = spy(realCmd);
@@ -260,11 +175,9 @@ public class ExportLogsCommandTest {
testMembers.add(member2);
ResultCollector testResults1 = new CustomCollector();
- testResults1.addResult(member1,
- Arrays.asList(new ExportedLogsSizeInfo(75 * MEGABYTE, GIGABYTE, TERABYTE)));
+ testResults1.addResult(member1, Arrays.asList(75 * MEGABYTE));
ResultCollector testResults2 = new CustomCollector();
- testResults2.addResult(member2,
- Arrays.asList(new ExportedLogsSizeInfo(60 * MEGABYTE, GIGABYTE, TERABYTE)));
+ testResults2.addResult(member2, Arrays.asList(60 * MEGABYTE));
doReturn(mockCache).when(spyCmd).getCache();
doReturn(testMembers).when(spyCmd).getMembers(null, null);
@@ -275,8 +188,6 @@ public class ExportLogsCommandTest {
doReturn(125 * MEGABYTE).when(spyCmd).getLocalDiskAvailable();
doReturn(GIGABYTE).when(spyCmd).getLocalDiskSize();
- doReturn(true).when(spyCmd).testhookSkipExports();
-
Result res = spyCmd.exportLogs("working dir", null, null, logLevel, onlyLogLevel, false, start,
end, logsOnly, statsOnly, "125m");
assertThat(res.getStatus()).isEqualTo(Result.Status.ERROR);
http://git-wip-us.apache.org/repos/asf/geode/blob/c5962aa9/geode-core/src/test/java/org/apache/geode/management/internal/cli/commands/ExportLogsDUnitTest.java
----------------------------------------------------------------------
diff --git a/geode-core/src/test/java/org/apache/geode/management/internal/cli/commands/ExportLogsDUnitTest.java b/geode-core/src/test/java/org/apache/geode/management/internal/cli/commands/ExportLogsDUnitTest.java
index 0e0f6aa..8609b3a 100644
--- a/geode-core/src/test/java/org/apache/geode/management/internal/cli/commands/ExportLogsDUnitTest.java
+++ b/geode-core/src/test/java/org/apache/geode/management/internal/cli/commands/ExportLogsDUnitTest.java
@@ -39,7 +39,6 @@ import org.apache.geode.test.dunit.rules.LocatorServerStartupRule;
import org.apache.geode.test.dunit.rules.Member;
import org.apache.geode.test.dunit.rules.MemberVM;
import org.apache.geode.test.junit.categories.DistributedTest;
-import org.apache.geode.test.junit.categories.FlakyTest;
import org.apache.logging.log4j.Logger;
import org.junit.Before;
import org.junit.Rule;
@@ -157,8 +156,7 @@ public class ExportLogsDUnitTest {
@Test
public void testExportWithThresholdLogLevelFilter() throws Exception {
- CommandResult result = gfshConnector
- .executeAndVerifyCommand("export logs --log-level=info --only-log-level=false");
+ gfshConnector.executeAndVerifyCommand("export logs --log-level=info --only-log-level=false");
Set<String> acceptedLogLevels = Stream.of("info", "error").collect(toSet());
verifyZipFileContents(acceptedLogLevels);
@@ -167,8 +165,7 @@ public class ExportLogsDUnitTest {
@Test
public void testExportWithExactLogLevelFilter() throws Exception {
- CommandResult result =
- gfshConnector.executeAndVerifyCommand("export logs --log-level=info --only-log-level=true");
+ gfshConnector.executeAndVerifyCommand("export logs --log-level=info --only-log-level=true");
Set<String> acceptedLogLevels = Stream.of("info").collect(toSet());
@@ -177,7 +174,7 @@ public class ExportLogsDUnitTest {
@Test
public void testExportWithNoOptionsGiven() throws Exception {
- CommandResult result = gfshConnector.executeAndVerifyCommand("export logs");
+ gfshConnector.executeAndVerifyCommand("export logs");
Set<String> acceptedLogLevels = Stream.of("info", "error", "debug").collect(toSet());
verifyZipFileContents(acceptedLogLevels);
}
@@ -229,7 +226,7 @@ public class ExportLogsDUnitTest {
}
- public void verifyZipFileContents(Set<String> acceptedLogLevels) throws IOException {
+ private void verifyZipFileContents(Set<String> acceptedLogLevels) throws IOException {
File unzippedLogFileDir = unzipExportedLogs();
Set<File> dirsFromZipFile =
@@ -247,7 +244,7 @@ public class ExportLogsDUnitTest {
}
}
- public void verifyLogFileContents(Set<String> acceptedLogLevels, File dirForMember)
+ private void verifyLogFileContents(Set<String> acceptedLogLevels, File dirForMember)
throws IOException {
String memberName = dirForMember.getName();
@@ -312,13 +309,13 @@ public class ExportLogsDUnitTest {
String message;
boolean shouldBeIgnoredDueToTimestamp;
- public LogLine(String message, String level, boolean shouldBeIgnoredDueToTimestamp) {
+ LogLine(String message, String level, boolean shouldBeIgnoredDueToTimestamp) {
this.message = message;
this.level = level;
this.shouldBeIgnoredDueToTimestamp = shouldBeIgnoredDueToTimestamp;
}
- public LogLine(Member member, String level) {
+ LogLine(Member member, String level) {
this.level = level;
this.message = buildMessage(member.getName());
}
@@ -332,13 +329,13 @@ public class ExportLogsDUnitTest {
if (Objects.equals(level, "error")) {
stringBuilder.append(ERROR_LOG_PREFIX + "-");
}
- stringBuilder.append(level + "-");
+ stringBuilder.append(level).append("-");
return stringBuilder.append(memberName).toString();
}
- public void writeLog(Logger logger) {
+ void writeLog(Logger logger) {
switch (this.level) {
case "info":
logger.info(getMessage());
http://git-wip-us.apache.org/repos/asf/geode/blob/c5962aa9/geode-core/src/test/java/org/apache/geode/management/internal/cli/commands/ExportLogsFileSizeLimitTest.java
----------------------------------------------------------------------
diff --git a/geode-core/src/test/java/org/apache/geode/management/internal/cli/commands/ExportLogsFileSizeLimitTest.java b/geode-core/src/test/java/org/apache/geode/management/internal/cli/commands/ExportLogsFileSizeLimitTest.java
index 1058053..4ab88b6 100644
--- a/geode-core/src/test/java/org/apache/geode/management/internal/cli/commands/ExportLogsFileSizeLimitTest.java
+++ b/geode-core/src/test/java/org/apache/geode/management/internal/cli/commands/ExportLogsFileSizeLimitTest.java
@@ -64,7 +64,7 @@ public class ExportLogsFileSizeLimitTest {
ExportLogsCommand exportLogsCommand = new ExportLogsCommand();
- assertThat(exportLogsCommand.isFileSizeCheckEnabledAndWithinLimit(MEGABYTE, file)).isTrue();
+ exportLogsCommand.isFileSizeCheckEnabledAndWithinLimit(MEGABYTE, file);
}
@Test
@@ -74,7 +74,7 @@ public class ExportLogsFileSizeLimitTest {
ExportLogsCommand exportLogsCommand = new ExportLogsCommand();
- assertThat(exportLogsCommand.isFileSizeCheckEnabledAndWithinLimit(0, file)).isFalse();
+ exportLogsCommand.isFileSizeCheckEnabledAndWithinLimit(0, file);
}
private void fillUpFile(File file, long sizeInBytes) throws IOException {
http://git-wip-us.apache.org/repos/asf/geode/blob/c5962aa9/geode-core/src/test/java/org/apache/geode/management/internal/cli/commands/ExportLogsTestSuite.java
----------------------------------------------------------------------
diff --git a/geode-core/src/test/java/org/apache/geode/management/internal/cli/commands/ExportLogsTestSuite.java b/geode-core/src/test/java/org/apache/geode/management/internal/cli/commands/ExportLogsTestSuite.java
index 8f8c532..4e1dac0 100644
--- a/geode-core/src/test/java/org/apache/geode/management/internal/cli/commands/ExportLogsTestSuite.java
+++ b/geode-core/src/test/java/org/apache/geode/management/internal/cli/commands/ExportLogsTestSuite.java
@@ -14,8 +14,10 @@
*/
package org.apache.geode.management.internal.cli.commands;
-import org.apache.geode.management.internal.cli.functions.SizeExportLogsFunctionCacheTest;
+import org.apache.geode.management.internal.cli.functions.SizeExportLogsFunctionTest;
import org.apache.geode.management.internal.cli.functions.SizeExportLogsFunctionFileTest;
+import org.apache.geode.management.internal.cli.util.LogExporterIntegrationTest;
+import org.apache.geode.management.internal.cli.util.LogExporterTest;
import org.apache.geode.management.internal.cli.util.LogSizerTest;
import org.junit.Ignore;
import org.junit.runner.RunWith;
@@ -27,9 +29,9 @@ import org.junit.runners.Suite;
@Ignore
@Suite.SuiteClasses({ExportLogsCommandTest.class, ExportLogsFileSizeLimitTest.class,
- ExportLogsIntegrationTest.class, ExportLogsDUnitTest.class,
- SizeExportLogsFunctionCacheTest.class, SizeExportLogsFunctionFileTest.class,
- LogSizerTest.class})
+ ExportLogsIntegrationTest.class, ExportLogsDUnitTest.class, SizeExportLogsFunctionTest.class,
+ SizeExportLogsFunctionFileTest.class, LogSizerTest.class, LogExporterTest.class,
+ LogExporterIntegrationTest.class})
@RunWith(Suite.class)
public class ExportLogsTestSuite {
}
http://git-wip-us.apache.org/repos/asf/geode/blob/c5962aa9/geode-core/src/test/java/org/apache/geode/management/internal/cli/functions/ExportedLogsSizeInfoTest.java
----------------------------------------------------------------------
diff --git a/geode-core/src/test/java/org/apache/geode/management/internal/cli/functions/ExportedLogsSizeInfoTest.java b/geode-core/src/test/java/org/apache/geode/management/internal/cli/functions/ExportedLogsSizeInfoTest.java
deleted file mode 100644
index 0bfbefa..0000000
--- a/geode-core/src/test/java/org/apache/geode/management/internal/cli/functions/ExportedLogsSizeInfoTest.java
+++ /dev/null
@@ -1,133 +0,0 @@
-/*
- * 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.apache.geode.test.junit.categories.UnitTest;
-import org.junit.Test;
-import org.junit.experimental.categories.Category;
-
-import java.io.ByteArrayInputStream;
-import java.io.ByteArrayOutputStream;
-import java.io.DataInputStream;
-import java.io.DataOutput;
-import java.io.DataOutputStream;
-
-@Category(UnitTest.class)
-public class ExportedLogsSizeInfoTest {
-
- @Test
- public void testExportedLogsSizeInfoConstructor() {
- ExportedLogsSizeInfo sizeDetail = new ExportedLogsSizeInfo(1L, 11L, 111L);
- assertThat(sizeDetail).isNotNull();
- assertThat(sizeDetail.getLogsSize()).isEqualTo(1L);
- assertThat(sizeDetail.getDiskAvailable()).isEqualTo(11L);
- assertThat(sizeDetail.getDiskSize()).isEqualTo(111L);
- }
-
- @Test
- public void testExportedLogsSizeInfoZeroArgConstructor() {
- ExportedLogsSizeInfo sizeDetail = new ExportedLogsSizeInfo();
- assertThat(sizeDetail).isNotNull();
- assertThat(sizeDetail.getLogsSize()).isEqualTo(0L);
- assertThat(sizeDetail.getDiskAvailable()).isEqualTo(0L);
- assertThat(sizeDetail.getDiskSize()).isEqualTo(0L);
- }
-
- @Test
- public void equals_returnsTrueForTwoInstancesWithTheSameFieldValues() throws Exception {
- ExportedLogsSizeInfo sizeDetail1 = new ExportedLogsSizeInfo(2L, 22L, 222L);
- ExportedLogsSizeInfo sizeDetail2 = new ExportedLogsSizeInfo(2L, 22L, 222L);
- assertThat(sizeDetail1.equals(sizeDetail1)).isTrue();
- assertThat(sizeDetail1.equals(sizeDetail2)).isTrue();
- assertThat(sizeDetail2.equals(sizeDetail1)).isTrue();
- }
-
- @Test
- public void equals_returnsFalseWhenLogsSizeDiffers() throws Exception {
- ExportedLogsSizeInfo sizeDetail1 = new ExportedLogsSizeInfo(3L, 33L, 333L);
- ExportedLogsSizeInfo sizeDetail2 = new ExportedLogsSizeInfo(33L, 33L, 333L);
- assertThat(sizeDetail1.equals(sizeDetail2)).isFalse();
- assertThat(sizeDetail2.equals(sizeDetail1)).isFalse();
- }
-
- @Test
- public void equals_returnsFalseWhenAvailableDiskDiffers() throws Exception {
- ExportedLogsSizeInfo sizeDetail1 = new ExportedLogsSizeInfo(4L, 44L, 444L);
- ExportedLogsSizeInfo sizeDetail2 = new ExportedLogsSizeInfo(4L, 4L, 444L);
- assertThat(sizeDetail1.equals(sizeDetail2)).isFalse();
- assertThat(sizeDetail2.equals(sizeDetail1)).isFalse();
- }
-
- @Test
- public void equals_returnsFalseWheneDiskSizeDiffers() throws Exception {
- ExportedLogsSizeInfo sizeDetail1 = new ExportedLogsSizeInfo(5L, 55L, 555L);
- ExportedLogsSizeInfo sizeDetail2 = new ExportedLogsSizeInfo(5L, 55L, 55L);
- assertThat(sizeDetail1.equals(sizeDetail2)).isFalse();
- assertThat(sizeDetail2.equals(sizeDetail1)).isFalse();
- }
-
- @Test
- public void equals_returnsFalseForComparisonWithNullObject() throws Exception {
- ExportedLogsSizeInfo sizeDetail1 = new ExportedLogsSizeInfo(6L, 66L, 666L);
- ExportedLogsSizeInfo sizeDetail2 = null;
- assertThat(sizeDetail1.equals(sizeDetail2)).isFalse();
- }
-
- @Test
- public void testClassInequality() {
- ExportedLogsSizeInfo sizeDeatai1 = new ExportedLogsSizeInfo(7L, 77L, 777L);
- String sizeDetail2 = sizeDeatai1.toString();
- assertThat(sizeDeatai1.equals(sizeDetail2)).isFalse();
- assertThat(sizeDetail2.equals(sizeDeatai1)).isFalse();
- }
-
- @Test
- public void testHashCode() throws Exception {
- ExportedLogsSizeInfo sizeDetail1 = new ExportedLogsSizeInfo();
- ExportedLogsSizeInfo sizeDetail2 = new ExportedLogsSizeInfo(8L, 88L, 888L);
- ExportedLogsSizeInfo sizeDetail3 = new ExportedLogsSizeInfo(88L, 8L, 888L);
-
- assertThat(sizeDetail1.hashCode()).isNotEqualTo(sizeDetail2.hashCode());
- assertThat(sizeDetail1.hashCode()).isNotEqualTo(sizeDetail3.hashCode());
- assertThat(sizeDetail2.hashCode()).isNotEqualTo(sizeDetail3.hashCode());
-
- assertThat(sizeDetail1.hashCode()).isEqualTo(29791);
- assertThat(sizeDetail2.hashCode()).isEqualTo(41095);
- assertThat(sizeDetail3.hashCode()).isEqualTo(115495);
- }
-
- @Test
- public void deserialization_setsFieldsToOriginalUnserializedValues() throws Exception {
- ExportedLogsSizeInfo sizeDetail = new ExportedLogsSizeInfo(9L, 99L, 999L);
- ByteArrayOutputStream baos = new ByteArrayOutputStream();
- DataOutput out = new DataOutputStream(baos);
- sizeDetail.toData(out);
- ExportedLogsSizeInfo sizeDetailIn = new ExportedLogsSizeInfo();
- sizeDetailIn.fromData(new DataInputStream(new ByteArrayInputStream(baos.toByteArray())));
-
- assertThat(sizeDetailIn).isEqualTo(sizeDetail);
- }
-
- @Test
- public void testToString() throws Exception {
- ExportedLogsSizeInfo sizeDetail = new ExportedLogsSizeInfo(10L, 100L, 1000L);
- assertThat(sizeDetail.toString())
- .isEqualTo("[logsSize: 10, diskAvailable: 100, diskSize: 1000]");
-
- }
-
-}
http://git-wip-us.apache.org/repos/asf/geode/blob/c5962aa9/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
deleted file mode 100644
index 0e8348d..0000000
--- a/geode-core/src/test/java/org/apache/geode/management/internal/cli/functions/SizeExportLogsFunctionCacheTest.java
+++ /dev/null
@@ -1,174 +0,0 @@
-/*
- * 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 static org.apache.geode.distributed.ConfigurationProperties.*;
-
-import org.apache.commons.io.FileUtils;
-import org.apache.geode.cache.Cache;
-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.test.dunit.rules.ServerStarterRule;
-import org.apache.geode.test.junit.categories.IntegrationTest;
-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.util.Collections;
-import java.util.LinkedList;
-import java.util.List;
-import java.util.Properties;
-
-@Category(IntegrationTest.class)
-public class SizeExportLogsFunctionCacheTest {
-
- private Cache cache;
-
- private SizeExportLogsFunction.Args nonFilteringArgs;
- private TestResultSender resultSender;
- private FunctionContext functionContext;
- private File dir;
- private DistributedMember member;
- private File logFile;
- private File statFile;
- private String name;
-
- @Rule
- public TemporaryFolder temporaryFolder = new TemporaryFolder();
-
- @Rule
- public TestName testName = new TestName();
-
- @Rule
- public ServerStarterRule server = new ServerStarterRule();
-
- @Before
- public void before() throws Throwable {
- name = testName.getMethodName();
-
- this.dir = this.temporaryFolder.getRoot();
- logFile = new File(dir, name + ".log");
- statFile = new File(dir, name + ".gfs");
-
- this.nonFilteringArgs = new ExportLogsFunction.Args(null, null, null, false, false, false);
- functionContext = new FunctionContextImpl("functionId", nonFilteringArgs, resultSender);
-
- }
-
- @Test
- public void withFiles_returnsCombinedSizeResult() throws Throwable {
- Properties config = new Properties();
- config.setProperty(NAME, name);
- config.setProperty(LOG_FILE, logFile.getAbsolutePath());
- config.setProperty(STATISTIC_ARCHIVE_FILE, statFile.getAbsolutePath());
-
- server.withProperties(config).startServer();
- TestResultSender resultSender = new TestResultSender();
- FunctionContext context = new FunctionContextImpl("functionId", nonFilteringArgs, resultSender);
-
- // 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);
- long finalFileSizes = FileUtils.sizeOf(logFile) + FileUtils.sizeOf(statFile);
- getAndVerifySizeEstimate(resultSender, initalFileSizes, finalFileSizes);
- }
-
- @Test
- public void noFiles_returnsZeroResult() throws Throwable {
- Properties config = new Properties();
- config.setProperty(NAME, name);
- config.setProperty(LOG_FILE, "");
- config.setProperty(STATISTIC_ARCHIVE_FILE, "");
-
- server.withProperties(config).startServer();
-
- TestResultSender resultSender = new TestResultSender();
- FunctionContext context = new FunctionContextImpl("functionId", nonFilteringArgs, resultSender);
-
- new SizeExportLogsFunction().execute(context);
- getAndVerifySizeEstimate(resultSender, 0L);
- }
-
- 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();
- if (minExpected == maxExpected) {
- assertThat(((ExportedLogsSizeInfo) result.get(0)).getLogsSize()).isEqualTo(minExpected);
- }
- assertThat(((ExportedLogsSizeInfo) result.get(0)).getLogsSize())
- .isGreaterThanOrEqualTo(minExpected).isLessThanOrEqualTo(maxExpected);
- }
-
- @Test
- public void withFunctionError_shouldThrow() throws Throwable {
- Properties config = new Properties();
- config.setProperty(NAME, name);
-
- server.withProperties(config).startServer();
-
- TestResultSender resultSender = new TestResultSender();
- FunctionContext context = new FunctionContextImpl("functionId", null, resultSender);
-
- new SizeExportLogsFunction().execute(context);
- assertThatThrownBy(resultSender::getResults).isInstanceOf(NullPointerException.class);
- }
-
- private static class TestResultSender implements ResultSender {
-
- private final List<Object> results = new LinkedList<>();
-
- private Throwable t;
-
- protected List<Object> getResults() throws Throwable {
- if (t != null) {
- throw t;
- }
- return Collections.unmodifiableList(results);
- }
-
- @Override
- public void lastResult(final Object lastResult) {
- results.add(lastResult);
- }
-
- @Override
- public void sendResult(final Object oneResult) {
- results.add(oneResult);
- }
-
- @Override
- public void sendException(final Throwable t) {
- this.t = t;
- }
- }
-}
http://git-wip-us.apache.org/repos/asf/geode/blob/c5962aa9/geode-core/src/test/java/org/apache/geode/management/internal/cli/functions/SizeExportLogsFunctionTest.java
----------------------------------------------------------------------
diff --git a/geode-core/src/test/java/org/apache/geode/management/internal/cli/functions/SizeExportLogsFunctionTest.java b/geode-core/src/test/java/org/apache/geode/management/internal/cli/functions/SizeExportLogsFunctionTest.java
new file mode 100644
index 0000000..cc5e7d5
--- /dev/null
+++ b/geode-core/src/test/java/org/apache/geode/management/internal/cli/functions/SizeExportLogsFunctionTest.java
@@ -0,0 +1,178 @@
+/*
+ * 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 static org.apache.geode.distributed.ConfigurationProperties.*;
+import static org.mockito.Mockito.doReturn;
+import static org.mockito.Mockito.spy;
+
+import org.apache.commons.io.FileUtils;
+import org.apache.geode.cache.execute.FunctionContext;
+import org.apache.geode.cache.execute.ResultSender;
+import org.apache.geode.distributed.internal.DistributionConfig;
+import org.apache.geode.internal.cache.execute.FunctionContextImpl;
+import org.apache.geode.management.ManagementException;
+import org.apache.geode.test.dunit.rules.ServerStarterRule;
+import org.apache.geode.test.junit.categories.IntegrationTest;
+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 org.mockito.Matchers;
+
+import java.io.File;
+import java.util.Collections;
+import java.util.LinkedList;
+import java.util.List;
+import java.util.Properties;
+
+@Category(IntegrationTest.class)
+public class SizeExportLogsFunctionTest {
+
+
+ private SizeExportLogsFunction.Args nonFilteringArgs;
+ private File logFile;
+ private File statFile;
+ private Properties config;
+ private TestResultSender resultSender;
+
+ @Rule
+ public TemporaryFolder temporaryFolder = new TemporaryFolder();
+
+ @Rule
+ public TestName testName = new TestName();
+
+ @Rule
+ public ServerStarterRule server = new ServerStarterRule();
+
+ @Before
+ public void before() throws Throwable {
+ String name = testName.getMethodName();
+ config = new Properties();
+ config.setProperty(NAME, name);
+
+ File dir = this.temporaryFolder.getRoot();
+ logFile = new File(dir, name + ".log");
+ statFile = new File(dir, name + ".gfs");
+
+ resultSender = new TestResultSender();
+ this.nonFilteringArgs = new SizeExportLogsFunction.Args(null, null, null, false, false, false);
+
+ }
+
+ @Test
+ public void withFiles_returnsCombinedSizeResult() throws Throwable {
+ config.setProperty(LOG_FILE, logFile.getAbsolutePath());
+ config.setProperty(STATISTIC_ARCHIVE_FILE, statFile.getAbsolutePath());
+
+ server.withProperties(config).startServer();
+ FunctionContext context = new FunctionContextImpl("functionId", nonFilteringArgs, resultSender);
+
+ // log and stat files sizes are not constant with a real cache running, so check for the sizer
+ // estimate within a range
+ long initialFileSizes = FileUtils.sizeOf(logFile) + FileUtils.sizeOf(statFile);
+ new SizeExportLogsFunction().execute(context);
+ long finalFileSizes = FileUtils.sizeOf(logFile) + FileUtils.sizeOf(statFile);
+ getAndVerifySizeEstimate(resultSender, initialFileSizes, finalFileSizes);
+ }
+
+ @Test
+ public void noFiles_returnsZeroResult() throws Throwable {
+ config.setProperty(LOG_FILE, "");
+ config.setProperty(STATISTIC_ARCHIVE_FILE, "");
+
+ server.withProperties(config).startServer();
+
+ FunctionContext context = new FunctionContextImpl("functionId", nonFilteringArgs, resultSender);
+ new SizeExportLogsFunction().execute(context);
+ getAndVerifySizeEstimate(resultSender, 0L);
+ }
+
+ @Test
+ public void withFunctionError_shouldThrow() throws Throwable {
+ server.withProperties(config).startServer();
+
+ FunctionContext context = new FunctionContextImpl("functionId", null, resultSender);
+ new SizeExportLogsFunction().execute(context);
+ assertThatThrownBy(resultSender::getResults).isInstanceOf(NullPointerException.class);
+ }
+
+ @Test
+ public void sizeGreaterThanDiskAvailable_sendsErrorResult() throws Throwable {
+ server.withProperties(config).startServer();
+
+ FunctionContext context = new FunctionContextImpl("functionId", nonFilteringArgs, resultSender);
+ SizeExportLogsFunction testFunction = new SizeExportLogsFunction();
+ SizeExportLogsFunction spyFunction = spy(testFunction);
+ long fakeDiskAvailable = 1024;
+ doReturn(fakeDiskAvailable).when(spyFunction)
+ .getDiskAvailable(Matchers.any(DistributionConfig.class));
+
+ spyFunction.execute(context);
+ assertThatThrownBy(resultSender::getResults).isInstanceOf(ManagementException.class);
+ }
+
+ 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();
+ if (minExpected == maxExpected) {
+ assertThat(((Long) result.get(0))).isEqualTo(minExpected);
+ }
+ assertThat(((Long) result.get(0))).isGreaterThanOrEqualTo(minExpected)
+ .isLessThanOrEqualTo(maxExpected);
+ }
+
+ private static class TestResultSender implements ResultSender {
+
+ private final List<Object> results = new LinkedList<>();
+
+ private Throwable t;
+
+ List<Object> getResults() throws Throwable {
+ if (t != null) {
+ throw t;
+ }
+ return Collections.unmodifiableList(results);
+ }
+
+ @Override
+ public void lastResult(final Object lastResult) {
+ results.add(lastResult);
+ }
+
+ @Override
+ public void sendResult(final Object oneResult) {
+ results.add(oneResult);
+ }
+
+ @Override
+ public void sendException(final Throwable t) {
+ this.t = t;
+ }
+ }
+}
http://git-wip-us.apache.org/repos/asf/geode/blob/c5962aa9/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
deleted file mode 100644
index e70a750..0000000
--- a/geode-core/src/test/java/org/apache/geode/management/internal/cli/functions/SizeExportLogsTestSuite.java
+++ /dev/null
@@ -1,29 +0,0 @@
-/*
- * 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, ExportedLogsSizeInfoTest.class})
-@RunWith(Suite.class)
-public class SizeExportLogsTestSuite {
-
-}
http://git-wip-us.apache.org/repos/asf/geode/blob/c5962aa9/geode-core/src/test/java/org/apache/geode/management/internal/cli/util/LogExporterTest.java
----------------------------------------------------------------------
diff --git a/geode-core/src/test/java/org/apache/geode/management/internal/cli/util/LogExporterTest.java b/geode-core/src/test/java/org/apache/geode/management/internal/cli/util/LogExporterTest.java
index a387af3..83f0b44 100644
--- a/geode-core/src/test/java/org/apache/geode/management/internal/cli/util/LogExporterTest.java
+++ b/geode-core/src/test/java/org/apache/geode/management/internal/cli/util/LogExporterTest.java
@@ -50,7 +50,7 @@ public class LogExporterTest {
public TemporaryFolder temporaryFolder = new TemporaryFolder();
private LogExporter logExporter;
- LogFilter logFilter;
+ private LogFilter logFilter;
private File workingDir;
@Before
@@ -71,7 +71,7 @@ public class LogExporterTest {
}
@Test
- public void exporterShouldStillReturnFilefNoAcceptableLogs() throws Exception {
+ public void exporterShouldStillReturnFileIfNoAcceptableLogs() throws Exception {
File logFile1 = new File(workingDir, "server1.log");
FileUtils.writeStringToFile(logFile1, "some log for server1 \n some other log line");
when(logFilter.acceptsLine(any())).thenReturn(LogFilter.LineFilterResult.LINE_REJECTED);
@@ -138,7 +138,7 @@ public class LogExporterTest {
assertThat(logExporter.findStatFiles(workingDir.toPath())).doesNotContain(notALogFile.toPath());
}
- public static Set<String> getZipEntries(String zipFilePath) throws IOException {
+ static Set<String> getZipEntries(String zipFilePath) throws IOException {
return new ZipFile(zipFilePath).stream().map(ZipEntry::getName).collect(Collectors.toSet());
}
http://git-wip-us.apache.org/repos/asf/geode/blob/c5962aa9/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
index c7b3ab9..f0b7f96 100644
--- 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
@@ -32,7 +32,6 @@ 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)
@@ -40,8 +39,6 @@ public class LogSizerTest {
private LogFilter logFilter;
private SizeExportLogsFunction.Args nonFilteringArgs;
- private File dir;
-
@Rule
public TemporaryFolder temporaryFolder = new TemporaryFolder();
@Rule
@@ -50,9 +47,7 @@ public class LogSizerTest {
@Before
public void setUp() throws Exception {
logFilter = mock(LogFilter.class);
- dir = temporaryFolder.getRoot();
nonFilteringArgs = new ExportLogsFunction.Args(null, null, null, false, false, false);
-
}
@After
@@ -62,8 +57,8 @@ public class LogSizerTest {
@Test
public void nullFileArgs_returnsZeroSize() throws ParseException, IOException {
- LogSizer sizer = new LogSizer(logFilter, null, null);
- assertThat(sizer.getFilteredSize()).isEqualTo(0L);
+ LogExporter sizer = new LogExporter(logFilter, null, null);
+ assertThat(sizer.estimateFilteredSize()).isEqualTo(0L);
}
@Test
@@ -75,8 +70,8 @@ public class LogSizerTest {
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);
+ LogExporter sizer = new LogExporter(logFilter, mockLogFile, mockStatFile);
+ assertThat(sizer.estimateFilteredSize()).isEqualTo(0L);
}
@Test
@@ -92,8 +87,8 @@ public class LogSizerTest {
new LogFilter(nonFilteringArgs.getLogLevel(), nonFilteringArgs.isThisLogLevelOnly(),
nonFilteringArgs.getStartTime(), nonFilteringArgs.getEndTime());
- LogSizer sizer = new LogSizer(logFilter, mockLogFile, mockStatFile);
- assertThat(sizer.getFilteredSize()).isEqualTo(0L);
+ LogExporter sizer = new LogExporter(logFilter, mockLogFile, mockStatFile);
+ assertThat(sizer.estimateFilteredSize()).isEqualTo(0L);
}
}