Skip to content

Commit 70758b2

Browse files
committed
[yugabyte#9209] Platform: Add Unit tests for universe
Summary: Add unit tests for new API and also add one for downloadNodeLogs that is not a new API but the test was never added. Fixed the issue introduced because try with resource does not work well with play framework's way of returning input stream. Also fixed list with name filter in new API. Test Plan: The diff is all about adding unit tests Reviewers: spotachev Reviewed By: spotachev Subscribers: hsu, jenkins-bot, yugaware Differential Revision: https://phabricator.dev.yugabyte.com/D12260
1 parent 200ad4c commit 70758b2

File tree

10 files changed

+4513
-4349
lines changed

10 files changed

+4513
-4349
lines changed

managed/src/main/java/com/yugabyte/yw/common/NodeUniverseManager.java

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -45,7 +45,8 @@ public synchronized ShellResponse downloadNodeLogs(
4545
commandArgs.add("--namespace");
4646
commandArgs.add(namespace);
4747
} else if (!getNodeDeploymentMode(node, universe).equals(Common.CloudType.unknown)) {
48-
AccessKey accessKey = AccessKey.get(providerUUID, cluster.userIntent.accessKeyCode);
48+
AccessKey accessKey =
49+
AccessKey.getOrBadRequest(providerUUID, cluster.userIntent.accessKeyCode);
4950
commandArgs.add("ssh");
5051
commandArgs.add("--port");
5152
commandArgs.add(accessKey.getKeyInfo().sshPort.toString());

managed/src/main/java/com/yugabyte/yw/controllers/UniverseInfoController.java

Lines changed: 15 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -33,7 +33,7 @@
3333

3434
import java.io.File;
3535
import java.io.FileInputStream;
36-
import java.io.IOException;
36+
import java.io.FileNotFoundException;
3737
import java.io.InputStream;
3838
import java.util.List;
3939
import java.util.UUID;
@@ -172,22 +172,27 @@ public Result healthCheck(UUID customerUUID, UUID universeUUID) {
172172
* @param nodeName name of the node
173173
* @return tar file of the tserver and master log files (if the node is a master server).
174174
*/
175-
// TODO: API
175+
@ApiOperation(value = "download Node logs", produces = "application/x-compressed")
176176
public CompletionStage<Result> downloadNodeLogs(
177177
UUID customerUUID, UUID universeUUID, String nodeName) {
178178
return CompletableFuture.supplyAsync(
179179
() -> {
180180
File file =
181181
universeInfoHandler.downloadNodeLogs(customerUUID, universeUUID, nodeName).toFile();
182-
try (InputStream is = new FileInputStream(file)) {
183-
file.delete(); // TODO: should this be done in finally?
184-
// return the file to client
185-
response().setHeader("Content-Disposition", "attachment; filename=" + file.getName());
186-
return ok(is).as("application/x-compressed");
187-
} catch (IOException e) {
188-
throw new YWServiceException(INTERNAL_SERVER_ERROR, e.getMessage());
189-
}
182+
InputStream is = getInputStreamOrFail(file);
183+
file.delete(); // TODO: should this be done in finally?
184+
// return the file to client
185+
response().setHeader("Content-Disposition", "attachment; filename=" + file.getName());
186+
return ok(is).as("application/x-compressed");
190187
},
191188
ec.current());
192189
}
190+
191+
private static InputStream getInputStreamOrFail(File file) {
192+
try {
193+
return new FileInputStream(file);
194+
} catch (FileNotFoundException e) {
195+
throw new YWServiceException(INTERNAL_SERVER_ERROR, e.getMessage());
196+
}
197+
}
193198
}

managed/src/main/java/com/yugabyte/yw/controllers/handlers/UniverseInfoHandler.java

Lines changed: 5 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -41,8 +41,7 @@
4141
import java.util.UUID;
4242
import java.util.stream.Collectors;
4343

44-
import static play.mvc.Http.Status.BAD_REQUEST;
45-
import static play.mvc.Http.Status.INTERNAL_SERVER_ERROR;
44+
import static play.mvc.Http.Status.*;
4645

4746
@Slf4j
4847
public class UniverseInfoHandler {
@@ -187,7 +186,10 @@ public Path downloadNodeLogs(UUID customerUUID, UUID universeUUID, String nodeNa
187186
Customer customer = Customer.getOrBadRequest(customerUUID);
188187
Universe universe = Universe.getValidUniverseOrBadRequest(universeUUID, customer);
189188
log.debug("Retrieving logs for " + nodeName);
190-
NodeDetails node = universe.getNode(nodeName);
189+
NodeDetails node =
190+
universe
191+
.maybeGetNode(nodeName)
192+
.orElseThrow(() -> new YWServiceException(NOT_FOUND, nodeName));
191193
String storagePath = runtimeConfigFactory.staticApplicationConf().getString("yb.storage.path");
192194
String tarFileName = node.cloudInfo.private_ip + "-logs.tar.gz";
193195
Path targetFile = Paths.get(storagePath + "/" + tarFileName);

managed/src/main/java/com/yugabyte/yw/models/Universe.java

Lines changed: 7 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -262,7 +262,11 @@ public static Universe getUniverseByName(String universeName) {
262262
}
263263

264264
public static Optional<Universe> maybeGetUniverseByName(String universeName) {
265-
return find.query().where().eq("name", universeName).findOneOrEmpty();
265+
return find.query()
266+
.where()
267+
.eq("name", universeName)
268+
.findOneOrEmpty()
269+
.map(Universe::fillUniverseDetails);
266270
}
267271

268272
/**
@@ -810,7 +814,7 @@ static boolean isUniversePaused(UUID uuid) {
810814
return universe.getUniverseDetails().universePaused;
811815
}
812816

813-
private static void fillUniverseDetails(Universe universe) {
817+
private static Universe fillUniverseDetails(Universe universe) {
814818
JsonNode detailsJson = Json.parse(universe.universeDetailsJson);
815819
universe.universeDetails = Json.fromJson(detailsJson, UniverseDefinitionTaskParams.class);
816820

@@ -825,5 +829,6 @@ private static void fillUniverseDetails(Universe universe) {
825829
Json.fromJson(detailsJson.get("placementInfo"), PlacementInfo.class);
826830
universe.universeDetails.upsertPrimaryCluster(userIntent, placementInfo);
827831
}
832+
return universe;
828833
}
829834
}

0 commit comments

Comments
 (0)