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")
}