diff --git a/java/serverless_lab1/.gitignore b/java/serverless_lab1/.gitignore index ebd987f..f7e6447 100644 --- a/java/serverless_lab1/.gitignore +++ b/java/serverless_lab1/.gitignore @@ -72,4 +72,5 @@ fabric.properties # Maven log/ -target/ \ No newline at end of file +target/ +dependency-reduced-pom.xml \ No newline at end of file diff --git a/java/serverless_lab1/README.md b/java/serverless_lab1/README.md new file mode 100644 index 0000000..cf2e7db --- /dev/null +++ b/java/serverless_lab1/README.md @@ -0,0 +1,112 @@ +## Steps to finish Lab + +### Step 1: Install IBMCloud CLI + +### Step 2: Deploy the function to IBM Cloud +Run mvn package to create the fat jar +``` +» mvn package [16:14:07] +[INFO] Scanning for projects... +[INFO] +[INFO] ---------< com.ibmdevelopersf.serverless_lab1:serverless_lab1 >--------- +[INFO] Building serverless_lab1 1.0-SNAPSHOT +[INFO] --------------------------------[ jar ]--------------------------------- +[INFO] +[INFO] --- maven-resources-plugin:2.6:resources (default-resources) @ serverless_lab1 --- +[INFO] Using 'UTF-8' encoding to copy filtered resources. +[INFO] skip non existing resourceDirectory /Users/ulidder/Documents/icloud-documents/code-upkar/serverless-labs/java/serverless_lab1/src/main/resources +[INFO] +[INFO] --- maven-compiler-plugin:3.1:compile (default-compile) @ serverless_lab1 --- +[INFO] Changes detected - recompiling the module! +[INFO] Compiling 1 source file to /Users/ulidder/Documents/icloud-documents/code-upkar/serverless-labs/java/serverless_lab1/target/classes +[INFO] +[INFO] --- maven-resources-plugin:2.6:testResources (default-testResources) @ serverless_lab1 --- +[INFO] Using 'UTF-8' encoding to copy filtered resources. +[INFO] skip non existing resourceDirectory /Users/ulidder/Documents/icloud-documents/code-upkar/serverless-labs/java/serverless_lab1/src/test/resources +[INFO] +[INFO] --- maven-compiler-plugin:3.1:testCompile (default-testCompile) @ serverless_lab1 --- +[INFO] Changes detected - recompiling the module! +[INFO] Compiling 1 source file to /Users/ulidder/Documents/icloud-documents/code-upkar/serverless-labs/java/serverless_lab1/target/test-classes +[INFO] +[INFO] --- maven-surefire-plugin:2.12.4:test (default-test) @ serverless_lab1 --- +[INFO] Surefire report directory: /Users/ulidder/Documents/icloud-documents/code-upkar/serverless-labs/java/serverless_lab1/target/surefire-reports + +------------------------------------------------------- + T E S T S +------------------------------------------------------- +Running com.ibmdevelopersf.serverless_lab1.ServerlessLab1Test +Nov 26, 2019 4:14:14 PM com.ibmdevelopersf.serverless_lab1.ServerlessLab1 main +INFO: exiting ServerlessLab1 +Nov 26, 2019 4:14:14 PM com.ibmdevelopersf.serverless_lab1.ServerlessLab1 main +INFO: exiting ServerlessLab1 +Nov 26, 2019 4:14:14 PM com.ibmdevelopersf.serverless_lab1.ServerlessLab1 main +INFO: exiting ServerlessLab1 +Nov 26, 2019 4:14:14 PM com.ibmdevelopersf.serverless_lab1.ServerlessLab1 main +INFO: exiting ServerlessLab1 +Tests run: 4, Failures: 0, Errors: 0, Skipped: 0, Time elapsed: 0.082 sec + +Results : + +Tests run: 4, Failures: 0, Errors: 0, Skipped: 0 + +[INFO] +[INFO] --- maven-jar-plugin:2.4:jar (default-jar) @ serverless_lab1 --- +[INFO] Building jar: /Users/ulidder/Documents/icloud-documents/code-upkar/serverless-labs/java/serverless_lab1/target/serverless_lab1.jar +[INFO] +[INFO] --- maven-shade-plugin:3.1.0:shade (default) @ serverless_lab1 --- +[INFO] Including com.google.code.gson:gson:jar:2.8.2 in the shaded jar. +[INFO] Replacing original artifact with shaded artifact. +[INFO] Replacing /Users/ulidder/Documents/icloud-documents/code-upkar/serverless-labs/java/serverless_lab1/target/serverless_lab1.jar with /Users/ulidder/Documents/icloud-documents/code-upkar/serverless-labs/java/serverless_lab1/target/serverless_lab1-1.0-SNAPSHOT-shaded.jar +[INFO] Dependency-reduced POM written at: /Users/ulidder/Documents/icloud-documents/code-upkar/serverless-labs/java/serverless_lab1/dependency-reduced-pom.xml +[INFO] ------------------------------------------------------------------------ +[INFO] BUILD SUCCESS +[INFO] ------------------------------------------------------------------------ +[INFO] Total time: 3.398 s +[INFO] Finished at: 2019-11-26T16:14:15-08:00 +[INFO] ------------------------------------------------------------------------ + +``` + +This creates `serverless_lab1.jar` file in `./target` folder. + +### Step 3: deploy the function to IBM Cloud using the CLI +1. Ensure you are logged into IBM Cloud +```$java +» ibmcloud target [16:15:49] + + +API endpoint: https://cloud.ibm.com +Region: us-south +User: upkar.ibm.watson.5@gmail.com +Account: Upkar Lidder's Account (a086ce7d00df4423ab024b123b587e76) +Resource group: No resource group targeted, use 'ibmcloud target -g RESOURCE_GROUP' +CF API endpoint: https://api.us-south.cf.cloud.ibm.com (API version: 2.142.0) +Org: upkar.ibm.watson.5@gmail.com +Space: dev + +``` + +2. deploy the jar file to ibm cloud +```$xslt +» ibmcloud fn action update helloJava target/serverless_lab1.jar --kind java:8 --main com.ibmdevelopersf.serverless_lab1.ServerlessLab1 +ok: updated action helloJava + +``` + +3. invoke the function to ensure it works +```$xslt +» ibmcloud fn action invoke helloJava -r +{ + "greeting": "Hello World!" +} + +``` + +4. Let's try with a param now +```$xslt +» ibmcloud fn action invoke helloJava -r -p name "upkar lidder" +{ + "greeting": "Hello upkar lidder" +} + +``` diff --git a/java/serverless_lab1/pom.xml b/java/serverless_lab1/pom.xml index 4d20d4d..7d6b3c0 100644 --- a/java/serverless_lab1/pom.xml +++ b/java/serverless_lab1/pom.xml @@ -10,66 +10,44 @@ serverless_lab1 - http://www.example.com + https://github.com/IBMDeveloperSF/serverless-labs UTF-8 1.7 1.7 + 2.8.2 + + com.google.code.gson + gson + ${gson.version} + junit junit - 4.11 + 4.12 test - - - - - - maven-clean-plugin - 3.1.0 - - - - maven-resources-plugin - 3.0.2 - - - maven-compiler-plugin - 3.8.0 - - - maven-surefire-plugin - 2.22.1 - - - maven-jar-plugin - 3.0.2 - - - maven-install-plugin - 2.5.2 - - - maven-deploy-plugin - 2.8.2 - - - - maven-site-plugin - 3.7.1 - - - maven-project-info-reports-plugin - 3.0.0 - - - + serverless_lab1 + + + org.apache.maven.plugins + maven-shade-plugin + 3.1.0 + + + package + + shade + + + + + diff --git a/java/serverless_lab1/src/main/java/com/ibmdevelopersf/serverless_lab1/App.java b/java/serverless_lab1/src/main/java/com/ibmdevelopersf/serverless_lab1/App.java deleted file mode 100644 index 53d51c5..0000000 --- a/java/serverless_lab1/src/main/java/com/ibmdevelopersf/serverless_lab1/App.java +++ /dev/null @@ -1,13 +0,0 @@ -package com.ibmdevelopersf.serverless_lab1; - -/** - * Hello world! - * - */ -public class App -{ - public static void main( String[] args ) - { - System.out.println( "Hello World!" ); - } -} diff --git a/java/serverless_lab1/src/main/java/com/ibmdevelopersf/serverless_lab1/ServerlessLab1.java b/java/serverless_lab1/src/main/java/com/ibmdevelopersf/serverless_lab1/ServerlessLab1.java new file mode 100644 index 0000000..e7e4a35 --- /dev/null +++ b/java/serverless_lab1/src/main/java/com/ibmdevelopersf/serverless_lab1/ServerlessLab1.java @@ -0,0 +1,26 @@ +package com.ibmdevelopersf.serverless_lab1; + +import com.google.gson.JsonObject; +import com.google.gson.JsonPrimitive; + +import java.util.logging.Logger; + +public class ServerlessLab1 { + + protected static final Logger logger = Logger.getLogger("ServerlessLab1"); + + public static JsonObject main(JsonObject args) { + JsonObject response = new JsonObject(); + JsonPrimitive nameArg = args.getAsJsonPrimitive("name"); + String result; + if (nameArg == null) { + result = "Hello World!"; + } else { + result = "Hello " + nameArg.getAsString(); + } + response.addProperty("greeting", result); + + logger.info("exiting ServerlessLab1"); + return response; + } +} diff --git a/java/serverless_lab1/src/test/java/com/ibmdevelopersf/serverless_lab1/AppTest.java b/java/serverless_lab1/src/test/java/com/ibmdevelopersf/serverless_lab1/AppTest.java deleted file mode 100644 index dac5d8e..0000000 --- a/java/serverless_lab1/src/test/java/com/ibmdevelopersf/serverless_lab1/AppTest.java +++ /dev/null @@ -1,20 +0,0 @@ -package com.ibmdevelopersf.serverless_lab1; - -import static org.junit.Assert.assertTrue; - -import org.junit.Test; - -/** - * Unit test for simple App. - */ -public class AppTest -{ - /** - * Rigorous Test :-) - */ - @Test - public void shouldAnswerWithTrue() - { - assertTrue( true ); - } -} diff --git a/java/serverless_lab1/src/test/java/com/ibmdevelopersf/serverless_lab1/ServerlessLab1Test.java b/java/serverless_lab1/src/test/java/com/ibmdevelopersf/serverless_lab1/ServerlessLab1Test.java new file mode 100644 index 0000000..556fba0 --- /dev/null +++ b/java/serverless_lab1/src/test/java/com/ibmdevelopersf/serverless_lab1/ServerlessLab1Test.java @@ -0,0 +1,51 @@ +package com.ibmdevelopersf.serverless_lab1; + +import static org.hamcrest.CoreMatchers.*; +import static org.junit.Assert.assertNotNull; +import static org.hamcrest.MatcherAssert.assertThat; + +import com.google.gson.JsonObject; + +import org.hamcrest.core.IsEqual; +import org.junit.Test; + +/** + * Unit test for simple App. + */ +public class ServerlessLab1Test { + + @Test + public void testMainFunctionDoesNotReturnNull() { + JsonObject args = new JsonObject(); + JsonObject response = ServerlessLab1.main(args); + assertNotNull(response); + } + + + @Test + public void testMainFunctionReturnsJsonObject() { + JsonObject args = new JsonObject(); + JsonObject response = ServerlessLab1.main(args); + assertThat(response, instanceOf(JsonObject.class)); + } + + @Test + public void testMainFunctionReturnsHelloWorld() { + JsonObject args = new JsonObject(); + final String greeting = "Hello World!"; + JsonObject response = ServerlessLab1.main(args); + assertThat(response.get("greeting"), is(notNullValue())); + assertThat(response.get("greeting").getAsString(), is(equalTo(greeting))); + } + + @Test + public void testMainFunctionReturnsGreetingsWithName() { + JsonObject args = new JsonObject(); + final String name = "Upkar Lidder"; + args.addProperty("name", name); + JsonObject response = ServerlessLab1.main(args); + assertThat(response.get("greeting"), is(notNullValue())); + assertThat(response.get("greeting").getAsString(), is(equalTo("Hello " + + name))); + } +}