Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
11 changes: 11 additions & 0 deletions cli-client/findbugs.exclude.xml
Original file line number Diff line number Diff line change
@@ -0,0 +1,11 @@
<FindBugsFilter>
<!-- See http://findbugs.sourceforge.net/manual/filter.html for details
of the syntax of this file -->

<Match>
<Bug pattern="DM_DEFAULT_ENCODING" />
<Class name="com.ibm.ws.lars.upload.cli.Main" />
</Match>


</FindBugsFilter>
Original file line number Diff line number Diff line change
@@ -0,0 +1,263 @@
/*******************************************************************************
* Copyright (c) 2015 IBM Corp.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*******************************************************************************/

package com.ibm.ws.lars.upload.cli;

import static org.junit.Assert.assertEquals;
import static org.junit.Assert.assertTrue;

import java.io.IOException;
import java.util.Arrays;
import java.util.regex.Matcher;
import java.util.regex.Pattern;

import org.junit.Before;
import org.junit.Rule;
import org.junit.Test;

import com.ibm.ws.lars.testutils.FatUtils;
import com.ibm.ws.lars.testutils.TestProcess;
import com.ibm.ws.lars.testutils.fixtures.RepositoryFixture;
import com.ibm.ws.repository.connections.RepositoryConnectionList;
import com.ibm.ws.repository.connections.RestRepositoryConnection;
import com.ibm.ws.repository.exceptions.RepositoryBackendException;

/**
* Test the find actions of the command line client
*/
public class FindAndDeleteFatTest {

@Rule
public RepositoryFixture repoServer = FatUtils.FAT_REPO;

private RestRepositoryConnection repoConnection;

@Before
public void setUp() {
repoConnection = (RestRepositoryConnection) repoServer.getAdminConnection();
}

@Test
public void testDelete() throws IOException, RepositoryBackendException {
RepositoryConnectionList connectionList = new RepositoryConnectionList(repoConnection);

String esaPath = "resources/com.ibm.websphere.appserver.adminCenter-1.0.esa";
TestProcess tp = new TestProcess(Arrays.asList(FatUtils.SCRIPT,
"upload",
"--url=" + FatUtils.SERVER_URL,
"--username=" + repoConnection.getUserId(),
"--password=" + repoConnection.getPassword(),
esaPath));
tp.run();
tp.assertReturnCode(0);
assertEquals("Incorrect resource count", 1, connectionList.getAllResources().size());
assertEquals("Incorrect feature count", 1, connectionList.getAllFeatures().size());
tp.assertOutputContains("done");

// Add another asset
String esa2Path = "resources/userFeature.esa";
TestProcess upload2 = new TestProcess(Arrays.asList(FatUtils.SCRIPT,
"upload",
"--url=" + FatUtils.SERVER_URL, esa2Path,
"--username=" + repoConnection.getUserId(),
"--password=" + repoConnection.getPassword()));
upload2.run();
upload2.assertReturnCode(0);
assertEquals("Incorrect resource count", 2, connectionList.getAllResources().size());
assertEquals("Incorrect feature count", 2, connectionList.getAllFeatures().size());
upload2.assertOutputContains("done");

// List assets, should now show 2 assets
TestProcess list2Process = new TestProcess(Arrays.asList(FatUtils.SCRIPT,
"listAll",
"--url=" + FatUtils.SERVER_URL,
"--username=" + repoConnection.getUserId(),
"--password=" + repoConnection.getPassword()));
list2Process.run();
String list2output = list2Process.getOutput();
int lineCount2 = FatUtils.countLines(list2output);

assertEquals("Output had the wrong number of lines\n" + list2output, 4, lineCount2);
findFeatureId(list2output, "Admin Center");
list2Process.assertReturnCode(0);

// Delete asset
TestProcess deleteProcess = new TestProcess(Arrays.asList(FatUtils.SCRIPT,
"findAndDelete",
"--noPrompts",
"admin",
"--url=" + FatUtils.SERVER_URL,
"--username=" + repoConnection.getUserId(),
"--password=" + repoConnection.getPassword()));
deleteProcess.run();
String deleteOutput = deleteProcess.getOutput();
int lineCount = FatUtils.countLines(deleteOutput);

assertEquals("Output had the wrong number of lines\n" + deleteOutput, 1, lineCount);
assertTrue("Asset not deleted\n" + deleteOutput + "\n" + list2output, deleteOutput.contains("Deleted asset "));
deleteProcess.assertReturnCode(0);

// List assets, should now show 1 assets
TestProcess list3Process = new TestProcess(Arrays.asList(FatUtils.SCRIPT,
"listAll",
"--url=" + FatUtils.SERVER_URL,
"--username=" + repoConnection.getUserId(),
"--password=" + repoConnection.getPassword()));
list3Process.run();
String list3output = list3Process.getOutput();
int lineCount3 = FatUtils.countLines(list3output);

assertEquals("Output had the wrong number of lines\n" + list3output, 3, lineCount3);
findFeatureId(list3output, "com.ibm.ws.test.userFeature");
list3Process.assertReturnCode(0);

}

@Test
public void testDeleteWithPrompts() throws IOException, RepositoryBackendException {
RepositoryConnectionList connectionList = new RepositoryConnectionList(repoConnection);

String esaPath = "resources/com.ibm.websphere.appserver.adminCenter-1.0.esa";
TestProcess tp = new TestProcess(Arrays.asList(FatUtils.SCRIPT,
"upload",
"--url=" + FatUtils.SERVER_URL,
"--username=" + repoConnection.getUserId(),
"--password=" + repoConnection.getPassword(),
esaPath));
tp.run();
tp.assertReturnCode(0);
assertEquals("Incorrect resource count", 1, connectionList.getAllResources().size());
assertEquals("Incorrect feature count", 1, connectionList.getAllFeatures().size());
tp.assertOutputContains("done");

// Add another asset
String esa2Path = "resources/userFeature.esa";
TestProcess upload2 = new TestProcess(Arrays.asList(FatUtils.SCRIPT,
"upload",
"--url=" + FatUtils.SERVER_URL, esa2Path,
"--username=" + repoConnection.getUserId(),
"--password=" + repoConnection.getPassword()));
upload2.run();
upload2.assertReturnCode(0);
assertEquals("Incorrect resource count", 2, connectionList.getAllResources().size());
assertEquals("Incorrect feature count", 2, connectionList.getAllFeatures().size());
upload2.assertOutputContains("done");

// List assets, should now show 2 assets
TestProcess list2Process = new TestProcess(Arrays.asList(FatUtils.SCRIPT,
"listAll",
"--url=" + FatUtils.SERVER_URL,
"--username=" + repoConnection.getUserId(),
"--password=" + repoConnection.getPassword()));
list2Process.run();
String list2output = list2Process.getOutput();
int lineCount2 = FatUtils.countLines(list2output);

assertEquals("Output had the wrong number of lines\n" + list2output, 4, lineCount2);
findFeatureId(list2output, "Admin Center");
list2Process.assertReturnCode(0);

// Delete asset but answer "n" to the deletion prompt
TestProcess deleteProcess = new TestProcess(Arrays.asList(FatUtils.SCRIPT,
"findAndDelete",
"admin",
"--url=" + FatUtils.SERVER_URL,
"--username=" + repoConnection.getUserId(),
"--password=" + repoConnection.getPassword()), "n" + System.lineSeparator());

deleteProcess.run();

String deleteOutput = deleteProcess.getOutput();
int lineCount = FatUtils.countLines(deleteOutput);

assertEquals("Output had the wrong number of lines\n" + deleteOutput, 1, lineCount);
assertTrue("No delete prompt\n" + deleteOutput + "\n" + list2output, deleteOutput.contains("Delete asset "));
deleteProcess.assertReturnCode(0);

// List assets, should still show 2 assets
TestProcess list3Process = new TestProcess(Arrays.asList(FatUtils.SCRIPT,
"listAll",
"--url=" + FatUtils.SERVER_URL,
"--username=" + repoConnection.getUserId(),
"--password=" + repoConnection.getPassword()));
list3Process.run();
String list3output = list3Process.getOutput();
int lineCount3 = FatUtils.countLines(list3output);

assertEquals("Output had the wrong number of lines\n" + list3output, 4, lineCount3);
findFeatureId(list3output, "com.ibm.ws.test.userFeature");
findFeatureId(list2output, "Admin Center");
list3Process.assertReturnCode(0);

// Delete asset answering "y" to the deletion prompt
TestProcess deleteProcess2 = new TestProcess(Arrays.asList(FatUtils.SCRIPT,
"findAndDelete",
"admin",
"--url=" + FatUtils.SERVER_URL,
"--username=" + repoConnection.getUserId(),
"--password=" + repoConnection.getPassword()), "y" + System.lineSeparator());

deleteProcess2.run();

String delete2Output = deleteProcess2.getOutput();
int lineCount4 = FatUtils.countLines(delete2Output);

assertEquals("Output had the wrong number of lines\n" + delete2Output, 2, lineCount4);
assertTrue("No delete prompt\n" + delete2Output + "\n" + delete2Output, delete2Output.contains("Delete asset "));
assertTrue("Asset not deleted\n" + delete2Output + "\n" + delete2Output, delete2Output.contains("Deleted asset "));
deleteProcess.assertReturnCode(0);

// List assets, should now show 1 asset
TestProcess list4Process = new TestProcess(Arrays.asList(FatUtils.SCRIPT,
"listAll",
"--url=" + FatUtils.SERVER_URL,
"--username=" + repoConnection.getUserId(),
"--password=" + repoConnection.getPassword()));
list4Process.run();
String list4output = list4Process.getOutput();
int lineCount5 = FatUtils.countLines(list4output);

assertEquals("Output had the wrong number of lines\n" + list4output, 3, lineCount5);
findFeatureId(list3output, "com.ibm.ws.test.userFeature");
list3Process.assertReturnCode(0);
}

/**
* Finds the id of a feature from the output of the list command, or fails the test if it can't
* be found. Output from the list command looks something like:
*
* Listing all assets in the repository:<br>
* Asset ID | Asset Type | Liberty Version | Asset Name<br>
* 54be3a90469ba2513fea88e7 | Feature | 8.5.5.5 | Admin Center (adminCenter-1.0)
*
* where the version may be blank
*
* @param output - output of the list command
* @param name - name of the feature to find
* @return
*/
private static String findFeatureId(String output, String name) {

String regex = "(\\w+)\\s+\\|\\s+Feature\\s+\\|.+\\|\\s+" + name;
Pattern idPattern = Pattern.compile(regex);
Matcher idMatcher = idPattern.matcher(output);
boolean result = idMatcher.find();
assertTrue("Can't find id for feature " + name + " in output:\n" + output, result);
String id = idMatcher.group(1);
return id;
}

}
Loading