This is an automated email from the ASF dual-hosted git repository.

rabbah pushed a commit to branch master
in repository 
https://gitbox.apache.org/repos/asf/incubator-openwhisk-runtime-ballerina.git


The following commit(s) were added to refs/heads/master by this push:
     new 3c57de1  Update Ballerina runtime to 0.990.2. (#10)
3c57de1 is described below

commit 3c57de1261a80d7fdf832452819904834ead05c1
Author: rodric rabbah <[email protected]>
AuthorDate: Sat Jan 26 01:32:35 2019 -0500

    Update Ballerina runtime to 0.990.2. (#10)
    
    Updates the Ballerina runtime to the latest stable release.
    
    Now can use "main" as the entry point, so updated README and test cases.
    
    Discovered small bug upstream related to a test for functions that do not 
return JSON. If the incoming request contains no values, we can either report a 
conformance error or substitute an empty {}. All the other runtimes do the 
latter so the proxy here is updated to match that behavior.
    
    Co-authored-by: mpmunasinghe <[email protected]>
---
 README.md                                          |  23 +--
 ballerina/.dockerignore                            |   5 +
 ballerina/Dockerfile                               |   5 +-
 ballerina/build.gradle                             |   2 +-
 ballerina/proxy/build.gradle                       |  37 +++--
 ballerina/proxy/gradle/wrapper/gradle-wrapper.jar  | Bin 54413 -> 54329 bytes
 ballerina/proxy/gradlew.bat                        | 168 ++++++++++-----------
 .../openwhisk/runtime/BallerinaProxy.java          |  56 ++++---
 .../ballerinalang/openwhisk/runtime/Constants.java |   2 +-
 gradle/docker.gradle                               |   2 +-
 gradle/wrapper/gradle-wrapper.jar                  | Bin 54413 -> 54329 bytes
 gradlew.bat                                        | 168 ++++++++++-----------
 settings.gradle                                    |   2 +-
 tests/build.gradle                                 |  20 ++-
 tests/src/test/resources/echo/echo.bal             |   6 +-
 tests/src/test/resources/envparams/envparams.bal   |   6 +-
 tests/src/test/resources/fail/fail.bal             |   2 +-
 tests/src/test/resources/hello/hello.bal           |   6 +-
 tests/src/test/resources/niam/niam.bal             |   9 ++
 tests/src/test/resources/norun/norun.bal           |   9 --
 tests/src/test/resources/notjson/notjson.bal       |   5 +
 .../resources/return-response/return-response.bal  |   6 +-
 tests/src/test/resources/unicode/unicode.bal       |   8 +-
 .../BallerinaActionContainerTests.scala            |  29 ++--
 24 files changed, 303 insertions(+), 273 deletions(-)

diff --git a/README.md b/README.md
index 21896ef..1728072 100644
--- a/README.md
+++ b/README.md
@@ -27,7 +27,7 @@ This repository contains the 
[Ballerina](https://ballerinalang.org) runtime for
 
 The following prerequisites are needed to try this out:
 
-- [Ballerina](https://ballerina.io/downloads/) >= 0.975.0
+- [Ballerina](https://ballerina.io/downloads/) >= 0.990.2
 
 ### Creating a Ballerina function
 
@@ -35,33 +35,24 @@ Create a file `hello.bal` for your Ballerina function with 
the following code:
 
 ```ballerina
 import ballerina/io;
-function main(string... args) {
-  io:println("started");
-}
-function run(json jsonInput) returns json {
+
+public function main(json jsonInput) returns json {
   io:println(jsonInput);
   json output = { "response": "hello-world"};
   return output;
 }
 ```
 
-The Ballerina file should include:
- - `main(string... args)` and
- - `run(json jsonInput)`.
-
-The first is necessary to compile the function but does not execute when you
-invoke the action.
+The Ballerina file must include a function called `main`. The abscence of 
`main` causes the Ballerina compiler to omit generation of the executable. You 
may have more than one entry point in your source file however (e.g., a `main` 
and a `run`) and use the standard OpenWhisk mechanism to specify other 
functions to run on entry (e.g., `--main <other function name>` when using the 
`wsk action create` CLI command). The function must accept a JSON object and 
return a JSON object to be compli [...]
 
 ### Compiling your function
 
-Run the [Ballerina](https://ballerina.io/downloads) compiler to
-build your function.
+Run the [Ballerina](https://ballerina.io/downloads) compiler to build your 
function.
 ```bash
 ballerina build hello.bal
 ```
 
-This generates an executable `hello.balx`. You will use this binary to create
-the OpenWhisk action.
+This generates an executable `hello.balx`. You will use this binary to create 
the OpenWhisk action.
 
 ### Creating and invoking your Ballerina action
 
@@ -69,7 +60,7 @@ Use the OpenWhisk [`wsk` 
CLI](https://github.com/apache/incubator-openwhisk/blob
 to create your Ballerina action.
 
 ```bash
-wsk action create hello hello.balx --docker openwhisk/action-ballerina-v0.975
+wsk action create hello hello.balx --docker openwhisk/action-ballerina-v0.990.2
 ```
 
 Now you're ready to invoke the action:
diff --git a/ballerina/.dockerignore b/ballerina/.dockerignore
index ce47343..faf3286 100644
--- a/ballerina/.dockerignore
+++ b/ballerina/.dockerignore
@@ -1,3 +1,8 @@
 *~
 proxy/build
 proxy/out
+.classpath
+.gitignore
+.gradle
+.project
+.settings
diff --git a/ballerina/Dockerfile b/ballerina/Dockerfile
index db0fb5a..66ccec4 100644
--- a/ballerina/Dockerfile
+++ b/ballerina/Dockerfile
@@ -32,10 +32,13 @@ ENV LANG="en_US.UTF-8" \
 ADD proxy /home/ballerina
 
 RUN cd /home/ballerina \
-    && rm -rf .classpath .gitignore .gradle .project .settings Dockerfile 
build \
     && ./gradlew shadowJar \
     && rm -rf /home/ballerina/src
 
 EXPOSE 8080
 
+## Use this command to run using jarfile
 CMD java -Dballerina.home=/home/ballerina/build 
-Djava.util.logging.manager=org.ballerinalang.logging.BLogManager -jar 
/home/ballerina/build/libs/ballerina-all.jar --http.port=8080
+
+## Use this command to debug remotely
+#CMD java -Dballerina.home=/home/ballerina/build 
-Djava.util.logging.manager=org.ballerinalang.logging.BLogManager -Xdebug 
-Xrunjdwp:transport=dt_socket,server=y,suspend=y,address=5005 -jar 
/home/ballerina/build/libs/ballerina-all.jar --http.port=8080
diff --git a/ballerina/build.gradle b/ballerina/build.gradle
index 33b36ed..a80d067 100644
--- a/ballerina/build.gradle
+++ b/ballerina/build.gradle
@@ -15,5 +15,5 @@
  * limitations under the License.
  */
 
-ext.dockerImageName = 'action-ballerina-v0.975'
+ext.dockerImageName = 'action-ballerina-v0.990.2'
 apply from: '../gradle/docker.gradle'
diff --git a/ballerina/proxy/build.gradle b/ballerina/proxy/build.gradle
index ddcc645..f294ecc 100644
--- a/ballerina/proxy/build.gradle
+++ b/ballerina/proxy/build.gradle
@@ -15,6 +15,10 @@
  * limitations under the License.
  */
 
+gradle.ext.ballerina = [
+        version: '0.990.2'
+]
+
 buildscript {
     repositories {
         jcenter()
@@ -40,19 +44,31 @@ repositories {
 
 dependencies {
     compile "org.wso2.msf4j:msf4j-service:2.4.2"
+    compile group: 'org.apache.ws.commons.axiom', name: 'axiom-impl', version: 
'1.2.11-wso2v12'
     compile ("org.wso2.msf4j:msf4j-core:2.4.2") {
         force = true
     }
-    compile "org.ballerinalang:ballerina-core:0.975.0"
-    compile "org.ballerinalang:ballerina-lang:0.975.0"
-    compile "org.ballerinalang:ballerina-grpc:0.975.0"
-    compile "org.ballerinalang:protobuf-ballerina:0.975.0"
-    compile "org.ballerinalang:ballerina-builtin:0.975.0"
-    compile "org.ballerinalang:ballerina-http:0.975.0"
-    compile "org.ballerinalang:ballerina-transactions:0.975.0"
-    compile "org.ballerinalang:ballerina-logging:0.975.0"
-    compile "org.ballerinalang:ballerina-database:0.975.0"
-    compile "org.ballerinalang:ballerina-micrometer-extension:0.975.0"
+    compile "org.ballerinalang:ballerina-core:${gradle.ballerina.version}"
+    compile "org.ballerinalang:ballerina-lang:${gradle.ballerina.version}"
+    compile "org.ballerinalang:ballerina-grpc:${gradle.ballerina.version}"
+    compile "org.ballerinalang:ballerina-h2:${gradle.ballerina.version}"
+    compile "org.ballerinalang:ballerina-http:${gradle.ballerina.version}"
+    compile "org.ballerinalang:ballerina-internal:${gradle.ballerina.version}"
+    compile "org.ballerinalang:ballerina-io:${gradle.ballerina.version}"
+    compile "org.ballerinalang:ballerina-jms:${gradle.ballerina.version}"
+    compile "org.ballerinalang:ballerina-log-api:${gradle.ballerina.version}"
+    compile "org.ballerinalang:ballerina-math:${gradle.ballerina.version}"
+    compile "org.ballerinalang:ballerina-mime:${gradle.ballerina.version}"
+    compile "org.ballerinalang:ballerina-mysql:${gradle.ballerina.version}"
+    compile "org.ballerinalang:ballerina-reflect:${gradle.ballerina.version}"
+    compile "org.ballerinalang:ballerina-runtime:${gradle.ballerina.version}"
+    compile "org.ballerinalang:ballerina-sql:${gradle.ballerina.version}"
+    compile "org.ballerinalang:ballerina-streams:${gradle.ballerina.version}"
+    compile "org.ballerinalang:ballerina-system:${gradle.ballerina.version}"
+    compile "org.ballerinalang:ballerina-task:${gradle.ballerina.version}"
+    compile "org.ballerinalang:ballerina-time:${gradle.ballerina.version}"
+    compile 
"org.ballerinalang:ballerina-transactions:${gradle.ballerina.version}"
+    compile "org.ballerinalang:ballerina-websub:${gradle.ballerina.version}"
     compile "org.slf4j:slf4j-api:1.7.22"
 }
 
@@ -73,6 +89,7 @@ shadowJar {
     exclude 'META-INF/*.DSA'
     exclude 'META-INF/*.RSA'
 }
+
 jar {
     manifest {
         attributes 'Main-Class': mainClassName
diff --git a/ballerina/proxy/gradle/wrapper/gradle-wrapper.jar 
b/ballerina/proxy/gradle/wrapper/gradle-wrapper.jar
index 91ca28c..f6b961f 100644
Binary files a/ballerina/proxy/gradle/wrapper/gradle-wrapper.jar and 
b/ballerina/proxy/gradle/wrapper/gradle-wrapper.jar differ
diff --git a/ballerina/proxy/gradlew.bat b/ballerina/proxy/gradlew.bat
index f955316..e95643d 100644
--- a/ballerina/proxy/gradlew.bat
+++ b/ballerina/proxy/gradlew.bat
@@ -1,84 +1,84 @@
-@if "%DEBUG%" == "" @echo off
-@rem ##########################################################################
-@rem
-@rem  Gradle startup script for Windows
-@rem
-@rem ##########################################################################
-
-@rem Set local scope for the variables with windows NT shell
-if "%OS%"=="Windows_NT" setlocal
-
-set DIRNAME=%~dp0
-if "%DIRNAME%" == "" set DIRNAME=.
-set APP_BASE_NAME=%~n0
-set APP_HOME=%DIRNAME%
-
-@rem Add default JVM options here. You can also use JAVA_OPTS and GRADLE_OPTS 
to pass JVM options to this script.
-set DEFAULT_JVM_OPTS=
-
-@rem Find java.exe
-if defined JAVA_HOME goto findJavaFromJavaHome
-
-set JAVA_EXE=java.exe
-%JAVA_EXE% -version >NUL 2>&1
-if "%ERRORLEVEL%" == "0" goto init
-
-echo.
-echo ERROR: JAVA_HOME is not set and no 'java' command could be found in your 
PATH.
-echo.
-echo Please set the JAVA_HOME variable in your environment to match the
-echo location of your Java installation.
-
-goto fail
-
-:findJavaFromJavaHome
-set JAVA_HOME=%JAVA_HOME:"=%
-set JAVA_EXE=%JAVA_HOME%/bin/java.exe
-
-if exist "%JAVA_EXE%" goto init
-
-echo.
-echo ERROR: JAVA_HOME is set to an invalid directory: %JAVA_HOME%
-echo.
-echo Please set the JAVA_HOME variable in your environment to match the
-echo location of your Java installation.
-
-goto fail
-
-:init
-@rem Get command-line arguments, handling Windows variants
-
-if not "%OS%" == "Windows_NT" goto win9xME_args
-
-:win9xME_args
-@rem Slurp the command line arguments.
-set CMD_LINE_ARGS=
-set _SKIP=2
-
-:win9xME_args_slurp
-if "x%~1" == "x" goto execute
-
-set CMD_LINE_ARGS=%*
-
-:execute
-@rem Setup the command line
-
-set CLASSPATH=%APP_HOME%\gradle\wrapper\gradle-wrapper.jar
-
-@rem Execute Gradle
-"%JAVA_EXE%" %DEFAULT_JVM_OPTS% %JAVA_OPTS% %GRADLE_OPTS% 
"-Dorg.gradle.appname=%APP_BASE_NAME%" -classpath "%CLASSPATH%" 
org.gradle.wrapper.GradleWrapperMain %CMD_LINE_ARGS%
-
-:end
-@rem End local scope for the variables with windows NT shell
-if "%ERRORLEVEL%"=="0" goto mainEnd
-
-:fail
-rem Set variable GRADLE_EXIT_CONSOLE if you need the _script_ return code 
instead of
-rem the _cmd.exe /c_ return code!
-if  not "" == "%GRADLE_EXIT_CONSOLE%" exit 1
-exit /b 1
-
-:mainEnd
-if "%OS%"=="Windows_NT" endlocal
-
-:omega
+@if "%DEBUG%" == "" @echo off
+@rem ##########################################################################
+@rem
+@rem  Gradle startup script for Windows
+@rem
+@rem ##########################################################################
+
+@rem Set local scope for the variables with windows NT shell
+if "%OS%"=="Windows_NT" setlocal
+
+set DIRNAME=%~dp0
+if "%DIRNAME%" == "" set DIRNAME=.
+set APP_BASE_NAME=%~n0
+set APP_HOME=%DIRNAME%
+
+@rem Add default JVM options here. You can also use JAVA_OPTS and GRADLE_OPTS 
to pass JVM options to this script.
+set DEFAULT_JVM_OPTS=
+
+@rem Find java.exe
+if defined JAVA_HOME goto findJavaFromJavaHome
+
+set JAVA_EXE=java.exe
+%JAVA_EXE% -version >NUL 2>&1
+if "%ERRORLEVEL%" == "0" goto init
+
+echo.
+echo ERROR: JAVA_HOME is not set and no 'java' command could be found in your 
PATH.
+echo.
+echo Please set the JAVA_HOME variable in your environment to match the
+echo location of your Java installation.
+
+goto fail
+
+:findJavaFromJavaHome
+set JAVA_HOME=%JAVA_HOME:"=%
+set JAVA_EXE=%JAVA_HOME%/bin/java.exe
+
+if exist "%JAVA_EXE%" goto init
+
+echo.
+echo ERROR: JAVA_HOME is set to an invalid directory: %JAVA_HOME%
+echo.
+echo Please set the JAVA_HOME variable in your environment to match the
+echo location of your Java installation.
+
+goto fail
+
+:init
+@rem Get command-line arguments, handling Windows variants
+
+if not "%OS%" == "Windows_NT" goto win9xME_args
+
+:win9xME_args
+@rem Slurp the command line arguments.
+set CMD_LINE_ARGS=
+set _SKIP=2
+
+:win9xME_args_slurp
+if "x%~1" == "x" goto execute
+
+set CMD_LINE_ARGS=%*
+
+:execute
+@rem Setup the command line
+
+set CLASSPATH=%APP_HOME%\gradle\wrapper\gradle-wrapper.jar
+
+@rem Execute Gradle
+"%JAVA_EXE%" %DEFAULT_JVM_OPTS% %JAVA_OPTS% %GRADLE_OPTS% 
"-Dorg.gradle.appname=%APP_BASE_NAME%" -classpath "%CLASSPATH%" 
org.gradle.wrapper.GradleWrapperMain %CMD_LINE_ARGS%
+
+:end
+@rem End local scope for the variables with windows NT shell
+if "%ERRORLEVEL%"=="0" goto mainEnd
+
+:fail
+rem Set variable GRADLE_EXIT_CONSOLE if you need the _script_ return code 
instead of
+rem the _cmd.exe /c_ return code!
+if  not "" == "%GRADLE_EXIT_CONSOLE%" exit 1
+exit /b 1
+
+:mainEnd
+if "%OS%"=="Windows_NT" endlocal
+
+:omega
diff --git 
a/ballerina/proxy/src/main/java/org/ballerinalang/openwhisk/runtime/BallerinaProxy.java
 
b/ballerina/proxy/src/main/java/org/ballerinalang/openwhisk/runtime/BallerinaProxy.java
index 7579b60..860a3a7 100644
--- 
a/ballerina/proxy/src/main/java/org/ballerinalang/openwhisk/runtime/BallerinaProxy.java
+++ 
b/ballerina/proxy/src/main/java/org/ballerinalang/openwhisk/runtime/BallerinaProxy.java
@@ -20,31 +20,29 @@ package org.ballerinalang.openwhisk.runtime;
 import com.google.gson.JsonElement;
 import com.google.gson.JsonObject;
 import org.ballerinalang.BLangProgramLoader;
+import org.ballerinalang.bre.bvm.BVMExecutor;
 import org.ballerinalang.logging.BLogManager;
-import org.ballerinalang.model.values.BJSON;
+import org.ballerinalang.model.util.JsonParser;
 import org.ballerinalang.model.values.BValue;
+import org.ballerinalang.util.codegen.FunctionInfo;
+import org.ballerinalang.util.codegen.PackageInfo;
 import org.ballerinalang.util.codegen.ProgramFile;
 import org.ballerinalang.util.exceptions.BLangRuntimeException;
 import org.ballerinalang.util.exceptions.ProgramFileFormatException;
-import org.ballerinalang.util.program.BLangFunctions;
 import org.wso2.msf4j.Request;
 
+import javax.ws.rs.POST;
+import javax.ws.rs.Path;
+import javax.ws.rs.core.Context;
+import javax.ws.rs.core.HttpHeaders;
+import javax.ws.rs.core.Response;
 import java.io.ByteArrayInputStream;
 import java.io.IOException;
 import java.io.InputStream;
 import java.lang.reflect.Field;
 import java.nio.charset.StandardCharsets;
-import java.util.Collections;
-import java.util.HashMap;
-import java.util.Map;
-import java.util.Optional;
+import java.util.*;
 import java.util.logging.LogManager;
-import java.util.Set;
-import javax.ws.rs.POST;
-import javax.ws.rs.Path;
-import javax.ws.rs.core.Context;
-import javax.ws.rs.core.HttpHeaders;
-import javax.ws.rs.core.Response;
 
 /**
  * OpenWhisk Ballerina Runtime Proxy Service
@@ -137,30 +135,40 @@ import javax.ws.rs.core.Response;
 
         requestElements = BalxLoader.requestToJson(request);
 
+        // Prepare input parameters
+        BValue[] parameters = new BValue[1];
+
         if (requestElements.size() == 0 || 
requestElements.getAsJsonObject(Constants.JSON_VALUE) == null) {
-            return buildRunResponse(Response.Status.BAD_REQUEST, 
Constants.RESPONSE_ERROR,
-                                    Constants.INVALID_INPUT_PARAMS);
+            // if the incoming request contains no values, we can either 
report a conformance error
+            // or substitute an empty {}; all the other runtimes do the latter 
so matching the behavior here.
+            // alternative:
+            //
+            // return buildRunResponse(Response.Status.BAD_REQUEST, 
Constants.RESPONSE_ERROR, Constants.INVALID_INPUT_PARAMS);
+            parameters[0] = JsonParser.parse("{}");
+        } else {
+            BValue bJson = 
JsonParser.parse(requestElements.getAsJsonObject(Constants.JSON_VALUE).toString());
+            parameters[0] = bJson;
         }
 
-        //Preparing input parameters
-        BValue bJson = new 
BJSON(requestElements.getAsJsonObject(Constants.JSON_VALUE).toString());
-        BValue[] parameters = new BValue[1];
-        parameters[0] = bJson;
-
-        //Setting up runtime environment variables
+        // Setup runtime environment variables
         augmentEnv(requestElements);
 
-        //Invoking the program file
+        // Invoke the program file
         try {
-            result = BLangFunctions
-                    .invokeEntrypointCallable(programFile, 
programFile.getEntryPkgName(), mainFunction, parameters);
+            PackageInfo packageInfo = 
programFile.getPackageInfo(programFile.getEntryPkgName());
+            FunctionInfo functionInfo = 
packageInfo.getFunctionInfo(mainFunction);
+            if (functionInfo == null) {
+                throw new RuntimeException("Function '" + mainFunction + "' is 
not defined");
+            }
+
+            result = BVMExecutor.executeEntryFunction(programFile, 
functionInfo, parameters);
         } catch (Exception e) {
             e.printStackTrace();
             return buildRunResponse(Response.Status.BAD_REQUEST, 
Constants.RESPONSE_ERROR,
                                     Constants.FUNCTION_RUN_FAILURE);
         }
 
-        //Preparing function response
+        // Prepare function response
         StringBuilder response = new StringBuilder();
         for (BValue bValue : result) {
             if ("json".equals(bValue.getType().toString())) {
diff --git 
a/ballerina/proxy/src/main/java/org/ballerinalang/openwhisk/runtime/Constants.java
 
b/ballerina/proxy/src/main/java/org/ballerinalang/openwhisk/runtime/Constants.java
index ba6e099..98e7264 100644
--- 
a/ballerina/proxy/src/main/java/org/ballerinalang/openwhisk/runtime/Constants.java
+++ 
b/ballerina/proxy/src/main/java/org/ballerinalang/openwhisk/runtime/Constants.java
@@ -26,7 +26,7 @@ class Constants {
     static final String CODE = "code";
     static final String IDENTITY = "identity";
 
-    static final String FUNCTION_CALLABLE_NAME = "run";
+    static final String FUNCTION_CALLABLE_NAME = "main";
     static final String FUNCTION_MAIN = "main";
     static final String FUNCTION_FILE_NAME = "function";
     static final String FUNCTION_EXTENSION = ".balx";
diff --git a/gradle/docker.gradle b/gradle/docker.gradle
index 6ad6850..5a7fb07 100644
--- a/gradle/docker.gradle
+++ b/gradle/docker.gradle
@@ -43,7 +43,7 @@ ext {
     dockerImageTag = project.hasProperty('dockerImageTag') ? dockerImageTag : 
'latest'
     dockerImagePrefix = project.hasProperty('dockerImagePrefix') ? 
dockerImagePrefix : 'whisk'
     dockerTimeout = project.hasProperty('dockerTimeout') ? 
dockerTimeout.toInteger() : 840
-    dockerRetries = project.hasProperty('dockerRetries') ? 
dockerRetries.toInteger() : 3
+    dockerRetries = project.hasProperty('dockerRetries') ? 
dockerRetries.toInteger() : 0
     dockerBinary = project.hasProperty('dockerBinary') ? [dockerBinary] : 
['docker']
     dockerBuildArg = ['build']
 }
diff --git a/gradle/wrapper/gradle-wrapper.jar 
b/gradle/wrapper/gradle-wrapper.jar
index 91ca28c..f6b961f 100644
Binary files a/gradle/wrapper/gradle-wrapper.jar and 
b/gradle/wrapper/gradle-wrapper.jar differ
diff --git a/gradlew.bat b/gradlew.bat
index f955316..e95643d 100644
--- a/gradlew.bat
+++ b/gradlew.bat
@@ -1,84 +1,84 @@
-@if "%DEBUG%" == "" @echo off
-@rem ##########################################################################
-@rem
-@rem  Gradle startup script for Windows
-@rem
-@rem ##########################################################################
-
-@rem Set local scope for the variables with windows NT shell
-if "%OS%"=="Windows_NT" setlocal
-
-set DIRNAME=%~dp0
-if "%DIRNAME%" == "" set DIRNAME=.
-set APP_BASE_NAME=%~n0
-set APP_HOME=%DIRNAME%
-
-@rem Add default JVM options here. You can also use JAVA_OPTS and GRADLE_OPTS 
to pass JVM options to this script.
-set DEFAULT_JVM_OPTS=
-
-@rem Find java.exe
-if defined JAVA_HOME goto findJavaFromJavaHome
-
-set JAVA_EXE=java.exe
-%JAVA_EXE% -version >NUL 2>&1
-if "%ERRORLEVEL%" == "0" goto init
-
-echo.
-echo ERROR: JAVA_HOME is not set and no 'java' command could be found in your 
PATH.
-echo.
-echo Please set the JAVA_HOME variable in your environment to match the
-echo location of your Java installation.
-
-goto fail
-
-:findJavaFromJavaHome
-set JAVA_HOME=%JAVA_HOME:"=%
-set JAVA_EXE=%JAVA_HOME%/bin/java.exe
-
-if exist "%JAVA_EXE%" goto init
-
-echo.
-echo ERROR: JAVA_HOME is set to an invalid directory: %JAVA_HOME%
-echo.
-echo Please set the JAVA_HOME variable in your environment to match the
-echo location of your Java installation.
-
-goto fail
-
-:init
-@rem Get command-line arguments, handling Windows variants
-
-if not "%OS%" == "Windows_NT" goto win9xME_args
-
-:win9xME_args
-@rem Slurp the command line arguments.
-set CMD_LINE_ARGS=
-set _SKIP=2
-
-:win9xME_args_slurp
-if "x%~1" == "x" goto execute
-
-set CMD_LINE_ARGS=%*
-
-:execute
-@rem Setup the command line
-
-set CLASSPATH=%APP_HOME%\gradle\wrapper\gradle-wrapper.jar
-
-@rem Execute Gradle
-"%JAVA_EXE%" %DEFAULT_JVM_OPTS% %JAVA_OPTS% %GRADLE_OPTS% 
"-Dorg.gradle.appname=%APP_BASE_NAME%" -classpath "%CLASSPATH%" 
org.gradle.wrapper.GradleWrapperMain %CMD_LINE_ARGS%
-
-:end
-@rem End local scope for the variables with windows NT shell
-if "%ERRORLEVEL%"=="0" goto mainEnd
-
-:fail
-rem Set variable GRADLE_EXIT_CONSOLE if you need the _script_ return code 
instead of
-rem the _cmd.exe /c_ return code!
-if  not "" == "%GRADLE_EXIT_CONSOLE%" exit 1
-exit /b 1
-
-:mainEnd
-if "%OS%"=="Windows_NT" endlocal
-
-:omega
+@if "%DEBUG%" == "" @echo off
+@rem ##########################################################################
+@rem
+@rem  Gradle startup script for Windows
+@rem
+@rem ##########################################################################
+
+@rem Set local scope for the variables with windows NT shell
+if "%OS%"=="Windows_NT" setlocal
+
+set DIRNAME=%~dp0
+if "%DIRNAME%" == "" set DIRNAME=.
+set APP_BASE_NAME=%~n0
+set APP_HOME=%DIRNAME%
+
+@rem Add default JVM options here. You can also use JAVA_OPTS and GRADLE_OPTS 
to pass JVM options to this script.
+set DEFAULT_JVM_OPTS=
+
+@rem Find java.exe
+if defined JAVA_HOME goto findJavaFromJavaHome
+
+set JAVA_EXE=java.exe
+%JAVA_EXE% -version >NUL 2>&1
+if "%ERRORLEVEL%" == "0" goto init
+
+echo.
+echo ERROR: JAVA_HOME is not set and no 'java' command could be found in your 
PATH.
+echo.
+echo Please set the JAVA_HOME variable in your environment to match the
+echo location of your Java installation.
+
+goto fail
+
+:findJavaFromJavaHome
+set JAVA_HOME=%JAVA_HOME:"=%
+set JAVA_EXE=%JAVA_HOME%/bin/java.exe
+
+if exist "%JAVA_EXE%" goto init
+
+echo.
+echo ERROR: JAVA_HOME is set to an invalid directory: %JAVA_HOME%
+echo.
+echo Please set the JAVA_HOME variable in your environment to match the
+echo location of your Java installation.
+
+goto fail
+
+:init
+@rem Get command-line arguments, handling Windows variants
+
+if not "%OS%" == "Windows_NT" goto win9xME_args
+
+:win9xME_args
+@rem Slurp the command line arguments.
+set CMD_LINE_ARGS=
+set _SKIP=2
+
+:win9xME_args_slurp
+if "x%~1" == "x" goto execute
+
+set CMD_LINE_ARGS=%*
+
+:execute
+@rem Setup the command line
+
+set CLASSPATH=%APP_HOME%\gradle\wrapper\gradle-wrapper.jar
+
+@rem Execute Gradle
+"%JAVA_EXE%" %DEFAULT_JVM_OPTS% %JAVA_OPTS% %GRADLE_OPTS% 
"-Dorg.gradle.appname=%APP_BASE_NAME%" -classpath "%CLASSPATH%" 
org.gradle.wrapper.GradleWrapperMain %CMD_LINE_ARGS%
+
+:end
+@rem End local scope for the variables with windows NT shell
+if "%ERRORLEVEL%"=="0" goto mainEnd
+
+:fail
+rem Set variable GRADLE_EXIT_CONSOLE if you need the _script_ return code 
instead of
+rem the _cmd.exe /c_ return code!
+if  not "" == "%GRADLE_EXIT_CONSOLE%" exit 1
+exit /b 1
+
+:mainEnd
+if "%OS%"=="Windows_NT" endlocal
+
+:omega
diff --git a/settings.gradle b/settings.gradle
index 62511e4..6a3c760 100644
--- a/settings.gradle
+++ b/settings.gradle
@@ -37,7 +37,7 @@ gradle.ext.scalafmt = [
 ]
 
 gradle.ext.ballerina = [
-        version: '0.975.0'
+        version: '0.990.2'
 ]
 
 gradle.ext.msf4j = [
diff --git a/tests/build.gradle b/tests/build.gradle
index 97e2fcd..b6b425f 100644
--- a/tests/build.gradle
+++ b/tests/build.gradle
@@ -42,12 +42,24 @@ dependencies {
     compile "org.ballerinalang:ballerina-core:${gradle.ballerina.version}"
     compile "org.ballerinalang:ballerina-lang:${gradle.ballerina.version}"
     compile "org.ballerinalang:ballerina-grpc:${gradle.ballerina.version}"
-    compile "org.ballerinalang:protobuf-ballerina:${gradle.ballerina.version}"
-    compile "org.ballerinalang:ballerina-builtin:${gradle.ballerina.version}"
+    compile "org.ballerinalang:ballerina-h2:${gradle.ballerina.version}"
     compile "org.ballerinalang:ballerina-http:${gradle.ballerina.version}"
+    compile "org.ballerinalang:ballerina-internal:${gradle.ballerina.version}"
+    compile "org.ballerinalang:ballerina-io:${gradle.ballerina.version}"
+    compile "org.ballerinalang:ballerina-jms:${gradle.ballerina.version}"
+    compile "org.ballerinalang:ballerina-log-api:${gradle.ballerina.version}"
+    compile "org.ballerinalang:ballerina-math:${gradle.ballerina.version}"
+    compile "org.ballerinalang:ballerina-mime:${gradle.ballerina.version}"
+    compile "org.ballerinalang:ballerina-mysql:${gradle.ballerina.version}"
+    compile "org.ballerinalang:ballerina-reflect:${gradle.ballerina.version}"
+    compile "org.ballerinalang:ballerina-runtime:${gradle.ballerina.version}"
+    compile "org.ballerinalang:ballerina-sql:${gradle.ballerina.version}"
+    compile "org.ballerinalang:ballerina-streams:${gradle.ballerina.version}"
+    compile "org.ballerinalang:ballerina-system:${gradle.ballerina.version}"
+    compile "org.ballerinalang:ballerina-task:${gradle.ballerina.version}"
+    compile "org.ballerinalang:ballerina-time:${gradle.ballerina.version}"
     compile 
"org.ballerinalang:ballerina-transactions:${gradle.ballerina.version}"
-    compile "org.ballerinalang:ballerina-database:${gradle.ballerina.version}"
-    compile 
"org.ballerinalang:ballerina-micrometer-extension:${gradle.ballerina.version}"
+    compile "org.ballerinalang:ballerina-websub:${gradle.ballerina.version}"
     compile "org.slf4j:slf4j-api:1.7.22"
 }
 
diff --git a/tests/src/test/resources/echo/echo.bal 
b/tests/src/test/resources/echo/echo.bal
index ea8f21d..f7a515b 100644
--- a/tests/src/test/resources/echo/echo.bal
+++ b/tests/src/test/resources/echo/echo.bal
@@ -1,11 +1,7 @@
 import ballerina/io;
 import ballerina/log;
 
-function main(string... args) {
-    io:println("started");
-}
-
-function run(json jsonInput) returns json {
+public function main(json jsonInput) returns json {
     io:println("hello stdout");
     log:printError("hello stderr");
     return jsonInput;
diff --git a/tests/src/test/resources/envparams/envparams.bal 
b/tests/src/test/resources/envparams/envparams.bal
index 0cdb3ef..bb474fd 100644
--- a/tests/src/test/resources/envparams/envparams.bal
+++ b/tests/src/test/resources/envparams/envparams.bal
@@ -1,11 +1,7 @@
 import ballerina/io;
 import ballerina/system;
 
-function main(string... args) {
-    io:println("started");
-}
-
-function run(json jsonInput) returns json {
+public function main(json jsonInput) returns json {
     json output = {};
     output.api_host = system:getEnv("__OW_API_HOST");
     output.api_key = system:getEnv("__OW_API_KEY");
diff --git a/tests/src/test/resources/fail/fail.bal 
b/tests/src/test/resources/fail/fail.bal
index 37d08a1..9941ec5 100644
--- a/tests/src/test/resources/fail/fail.bal
+++ b/tests/src/test/resources/fail/fail.bal
@@ -1,5 +1,5 @@
 import ballerina/io;
 
-function main(string... args) {
+public function main(string... args) {
     io:println("started");
 }
diff --git a/tests/src/test/resources/hello/hello.bal 
b/tests/src/test/resources/hello/hello.bal
index 68b3790..3172d96 100644
--- a/tests/src/test/resources/hello/hello.bal
+++ b/tests/src/test/resources/hello/hello.bal
@@ -1,10 +1,6 @@
 import ballerina/io;
 
-function main(string... args) {
-   io:println("started");
-}
-
-function run(json jsonInput) returns json {
+public function main(json jsonInput) returns json {
    json output = { "response": "hello-world" };
    return output;
 }
diff --git a/tests/src/test/resources/niam/niam.bal 
b/tests/src/test/resources/niam/niam.bal
new file mode 100644
index 0000000..681b535
--- /dev/null
+++ b/tests/src/test/resources/niam/niam.bal
@@ -0,0 +1,9 @@
+import ballerina/io;
+
+public function main(string... args) {
+    io:println("started");
+}
+
+public function niam(json jsonInput) returns json {
+    return jsonInput;
+}
diff --git a/tests/src/test/resources/norun/norun.bal 
b/tests/src/test/resources/norun/norun.bal
deleted file mode 100644
index a123813..0000000
--- a/tests/src/test/resources/norun/norun.bal
+++ /dev/null
@@ -1,9 +0,0 @@
-import ballerina/io;
-
-function main(string... args) {
-    io:println("started");
-}
-
-function example(json jsonInput) returns json {
-    return jsonInput;
-}
diff --git a/tests/src/test/resources/notjson/notjson.bal 
b/tests/src/test/resources/notjson/notjson.bal
new file mode 100644
index 0000000..6f7f5fa
--- /dev/null
+++ b/tests/src/test/resources/notjson/notjson.bal
@@ -0,0 +1,5 @@
+import ballerina/io;
+
+public function main(json jsonInput) returns string {
+    return "hello";
+}
diff --git a/tests/src/test/resources/return-response/return-response.bal 
b/tests/src/test/resources/return-response/return-response.bal
index 47af9c2..cbe385b 100644
--- a/tests/src/test/resources/return-response/return-response.bal
+++ b/tests/src/test/resources/return-response/return-response.bal
@@ -1,9 +1,5 @@
 import ballerina/io;
 
-function main(string... args) {
-    io:println("started");
-}
-
-function run(json jsonInput) returns json {
+public function main(json jsonInput) returns json {
     return jsonInput;
 }
diff --git a/tests/src/test/resources/unicode/unicode.bal 
b/tests/src/test/resources/unicode/unicode.bal
index c48dee2..7b5feab 100644
--- a/tests/src/test/resources/unicode/unicode.bal
+++ b/tests/src/test/resources/unicode/unicode.bal
@@ -1,11 +1,7 @@
 import ballerina/io;
 
-function main(string... args) {
-    io:println("started");
-}
-
-function run(json jsonInput) returns json {
-    string delimiter = check <string> jsonInput.delimiter;
+public function main(json jsonInput) returns json {
+    string delimiter = <string> jsonInput.delimiter;
     string str = delimiter + " ☃ " + delimiter;
     io:println(str);
     jsonInput.winter = str;
diff --git 
a/tests/src/test/scala/actionContainers/BallerinaActionContainerTests.scala 
b/tests/src/test/scala/actionContainers/BallerinaActionContainerTests.scala
index 61d2aec..fc05aa7 100644
--- a/tests/src/test/scala/actionContainers/BallerinaActionContainerTests.scala
+++ b/tests/src/test/scala/actionContainers/BallerinaActionContainerTests.scala
@@ -17,6 +17,8 @@
 
 package actionContainers
 
+import java.lang.Exception
+
 import actionContainers.ActionContainer.withContainer
 import common.WskActorSystem
 import java.nio.file.{Files, Paths}
@@ -34,7 +36,7 @@ import spray.json._
 @RunWith(classOf[JUnitRunner])
 class BallerinaActionContainerTests extends BasicActionRunnerTests with 
WskActorSystem {
 
-  lazy val ballerinaContainerImageName = "action-ballerina-v0.975"
+  lazy val ballerinaContainerImageName = "action-ballerina-v0.990.2"
 
   override def withActionContainer(env: Map[String, String] = Map.empty)(code: 
ActionContainer => Unit) = {
     withContainer(ballerinaContainerImageName, env)(code)
@@ -49,8 +51,7 @@ class BallerinaActionContainerTests extends 
BasicActionRunnerTests with WskActor
   }
 
   override val testNotReturningJson = {
-    // skip this test to fix the nuller
-    TestConfig("", skipTest = true)
+    TestConfig(buildBal("notjson"), enforceEmptyOutputStream = false)
   }
 
   override val testEnv = {
@@ -58,7 +59,8 @@ class BallerinaActionContainerTests extends 
BasicActionRunnerTests with WskActor
   }
 
   override val testEcho = {
-    TestConfig(buildBal("echo"), skipTest = true)
+    // see https://github.com/ballerina-platform/ballerina-lang/issues/8952 no 
way to print to stderr
+    TestConfig(buildBal("echo"), skipTest = true) // note that skip test here 
only skips the stderr check
   }
 
   override val testUnicode = {
@@ -66,7 +68,7 @@ class BallerinaActionContainerTests extends 
BasicActionRunnerTests with WskActor
   }
 
   override val testEntryPointOtherThanMain = {
-    TestConfig(buildBal("norun"), "example", enforceEmptyOutputStream = false)
+    TestConfig(buildBal("niam"), "niam", enforceEmptyOutputStream = false)
   }
 
   override val testLargeInput = {
@@ -86,7 +88,7 @@ class BallerinaActionContainerTests extends 
BasicActionRunnerTests with WskActor
     }
   }
 
-  it should "Initialize with function returning the response and invoke" in {
+  it should "Initialize with function returning the response and invoke it" in 
{
     val (out, err) = withActionContainer() { c =>
       val sourceFile = buildBal("return-response")
       sourceFile should not be "Build Error"
@@ -99,7 +101,7 @@ class BallerinaActionContainerTests extends 
BasicActionRunnerTests with WskActor
     }
   }
 
-  it should "should fail for Ballerina code with no run function" in {
+  it should "should fail for Ballerina code with incompatible main" in {
     val (out, err) = withActionContainer() { c =>
       val sourceFile = buildBal("fail")
       sourceFile should not be "Build Error"
@@ -108,7 +110,7 @@ class BallerinaActionContainerTests extends 
BasicActionRunnerTests with WskActor
       initCode should be(200)
 
       val (runCode, _) = c.run(runPayload(JsObject("response" -> 
JsString("hello-world"))))
-      runCode should be(400)
+      runCode should not be (200)
     }
   }
 
@@ -142,6 +144,7 @@ class BallerinaActionContainerTests extends 
BasicActionRunnerTests with WskActor
     }
 
     val path = getClass.getResource("/".concat(functionName)).getPath
+    val balxPath = Paths.get(path, functionName.concat(".balx"))
     val context = new CompilerContext
     val options = CompilerOptions.getInstance(context)
 
@@ -149,15 +152,21 @@ class BallerinaActionContainerTests extends 
BasicActionRunnerTests with WskActor
     options.put(COMPILER_PHASE, CompilerPhase.CODE_GEN.toString)
     options.put(OFFLINE, "true")
 
+    Files.deleteIfExists(balxPath)
     val compiler = Compiler.getInstance(context)
-    compiler.build()
+    try {
+      val compiledPackage = compiler.build()
+      compiledPackage should have size 1
+      compiledPackage.forEach(pkg => compiler.write(pkg, balxPath.toString))
+    } catch {
+      case e: Exception => return "Build Error"
+    }
 
     val diagnosticLog = BLangDiagnosticLog.getInstance(context)
     if (diagnosticLog.errorCount > 0) {
       return "Build Error"
     }
 
-    val balxPath = Paths.get(path, functionName.concat(".balx"))
     val encoded = Base64.getEncoder.encode(Files.readAllBytes(balxPath))
     new String(encoded, "UTF-8")
   }

Reply via email to