This is an automated email from the ASF dual-hosted git repository.
dgrove pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/openwhisk-runtime-dotnet.git
The following commit(s) were added to refs/heads/master by this push:
new 3aeba59 Drop support for dotnet3.1 (EOL) (#83)
3aeba59 is described below
commit 3aeba59ed4d58f6b8a2505c4cdf65e3c1d030875
Author: David Grove <[email protected]>
AuthorDate: Fri Aug 30 14:45:50 2024 -0400
Drop support for dotnet3.1 (EOL) (#83)
---
.github/workflows/ci.yaml | 6 +-
README.md | 2 -
core/dotnet3.1/CHANGELOG.md | 47 ----
core/dotnet3.1/Dockerfile | 42 ----
core/dotnet3.1/QUICKSTART.md | 238 ------------------
core/dotnet3.1/build.gradle | 20 --
.../Apache.OpenWhisk.Runtime.Common.csproj | 33 ---
.../HttpResponseExtension.cs | 43 ----
.../proxy/Apache.OpenWhisk.Runtime.Common/Init.cs | 192 ---------------
.../proxy/Apache.OpenWhisk.Runtime.Common/Run.cs | 130 ----------
.../Apache.OpenWhisk.Runtime.Common/Startup.cs | 70 ------
.../Apache.OpenWhisk.Runtime.Dotnet.Minimal.csproj | 28 ---
.../Program.cs | 48 ----
core/dotnet3.1/proxy/build.gradle | 28 ---
.../proxy/gradle/wrapper/gradle-wrapper.jar | Bin 54329 -> 0 bytes
.../proxy/gradle/wrapper/gradle-wrapper.properties | 21 --
core/dotnet3.1/proxy/gradlew | 188 ---------------
core/dotnet3.1/proxy/gradlew.bat | 100 --------
core/dotnet3.1/proxy/openwhisk-runtime-dotnet.sln | 39 ---
core/net6.0/QUICKSTART.md | 2 +-
settings.gradle | 4 -
tests/build.gradle | 1 -
.../Apache.OpenWhisk.Tests.Dotnet.csproj | 32 ---
tests/dotnet3.1/build.gradle | 51 ----
tests/dotnet3.1/openwhisk-tests-dotnet.sln | 33 ---
.../DotNet3_1ActionContainerTests.scala | 266 ---------------------
.../DotNet3_1ActionContainerTests_2_2.scalaZ | 266 ---------------------
tools/vagrant/README.md | 1 -
28 files changed, 2 insertions(+), 1929 deletions(-)
diff --git a/.github/workflows/ci.yaml b/.github/workflows/ci.yaml
index 2ca90c6..7c62158 100644
--- a/.github/workflows/ci.yaml
+++ b/.github/workflows/ci.yaml
@@ -88,8 +88,6 @@ jobs:
working-directory: runtime
run: |
SHORT_COMMIT=$(git rev-parse --short "$GITHUB_SHA")
- ./gradlew :core:dotnet3.1:distDocker -PdockerRegistry=docker.io
-PdockerImagePrefix=openwhisk -PdockerImageTag=nightly
- ./gradlew :core:dotnet3.1:distDocker -PdockerRegistry=docker.io
-PdockerImagePrefix=openwhisk -PdockerImageTag=$SHORT_COMMIT
./gradlew :core:net6.0:distDocker -PdockerRegistry=docker.io
-PdockerImagePrefix=openwhisk -PdockerImageTag=nightly
./gradlew :core:net6.0:distDocker -PdockerRegistry=docker.io
-PdockerImagePrefix=openwhisk -PdockerImageTag=$SHORT_COMMIT
- name: Push Release Images
@@ -98,9 +96,7 @@ jobs:
run: |
RUNTIME_VERSION=${GITHUB_REF_NAME%@*}
IMAGE_TAG=${GITHUB_REF_NAME##*@}
- if [ ${RUNTIME_VERSION} == "3.1" ]; then
- RUNTIME="dotnet3.1"
- elif [ ${RUNTIME_VERSION} == "6.0" ]; then
+ if [ ${RUNTIME_VERSION} == "6.0" ]; then
RUNTIME="net6.0"
fi
./gradlew :core:$RUNTIME:distDocker -PdockerRegistry=docker.io
-PdockerImagePrefix=openwhisk -PdockerImageTag=$IMAGE_TAG
diff --git a/README.md b/README.md
index 2760967..a2661c2 100644
--- a/README.md
+++ b/README.md
@@ -124,12 +124,10 @@ namespace Apache.OpenWhisk.Tests.Dotnet
## Changelogs
-- [.NET Core 3.1 CHANGELOG.md](core/dotnet3.1/CHANGELOG.md)
- [.NET 6.0 CHANGELOG.md](core/net6.0/CHANGELOG.md)
## Quick Start Guides
-- [.NET Core 3.1](core/dotnet3.1/QUICKSTART.md)
- [.NET Core 6.0](core/net6.0/QUICKSTART.md)
# License
diff --git a/core/dotnet3.1/CHANGELOG.md b/core/dotnet3.1/CHANGELOG.md
deleted file mode 100644
index f856950..0000000
--- a/core/dotnet3.1/CHANGELOG.md
+++ /dev/null
@@ -1,47 +0,0 @@
-<!--
-#
-# Licensed to the Apache Software Foundation (ASF) under one or more
-# contributor license agreements. See the NOTICE file distributed with
-# this work for additional information regarding copyright ownership.
-# The ASF licenses this file to You 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.
-#
--->
-
-# .NET Core 3.1 OpenWhisk Runtime Container
-
-## 1.17
-- Support array result include sequence action (#65)
-
-## 1.16
-- Fix Akka version ($55)
-- Init json quickstart updates (#50)
-- Export init args to environment. (#44)
-- Upgrade dotnet sdk packages (removed 2.2 references) (#42)
-
-## 1.15
-Changes:
-- Increased MaxRequestBodySize, so larger zip files can be uploaded (#33)
-- Get the latest security fixes (apk upgrade) with every build.
-
-## 1.14
-Changes:
-- Initial release
-- Support for async methods. Example:
-
-```csharp
- public async Task<JObject> MainAsync(JObject args)
- {
- await Task.Delay(10); // Just do a delay to have an async/await
process occur.
- return (args);
- }
-```
diff --git a/core/dotnet3.1/Dockerfile b/core/dotnet3.1/Dockerfile
deleted file mode 100644
index f636628..0000000
--- a/core/dotnet3.1/Dockerfile
+++ /dev/null
@@ -1,42 +0,0 @@
-#
-# Licensed to the Apache Software Foundation (ASF) under one or more
-# contributor license agreements. See the NOTICE file distributed with
-# this work for additional information regarding copyright ownership.
-# The ASF licenses this file to You 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.
-#
-
-FROM mcr.microsoft.com/dotnet/core/sdk:3.1-alpine AS build
-
-WORKDIR /app
-COPY proxy/Apache.OpenWhisk.Runtime.Common/*.csproj
./Apache.OpenWhisk.Runtime.Common/
-COPY proxy/Apache.OpenWhisk.Runtime.Dotnet.Minimal/*.csproj
./Apache.OpenWhisk.Runtime.Dotnet.Minimal/
-COPY proxy/openwhisk-runtime-dotnet.sln ./openwhisk-runtime-dotnet.sln
-RUN dotnet restore
-
-COPY proxy/Apache.OpenWhisk.Runtime.Common/. ./Apache.OpenWhisk.Runtime.Common/
-COPY proxy/Apache.OpenWhisk.Runtime.Dotnet.Minimal/.
./Apache.OpenWhisk.Runtime.Dotnet.Minimal/
-WORKDIR /app/Apache.OpenWhisk.Runtime.Dotnet.Minimal
-RUN dotnet publish -c Release -r linux-musl-x64 -o out
-
-FROM mcr.microsoft.com/dotnet/core/runtime:3.1-alpine AS runtime
-
-# Get the latest security fixes in case the base image does not contain them
already.
-RUN apk update \
- && apk upgrade \
- && rm -f /var/cache/apk/*
-
-WORKDIR /app
-COPY --from=build /app/Apache.OpenWhisk.Runtime.Dotnet.Minimal/out ./
-ENV ASPNETCORE_URLS http://+:8080
-EXPOSE 8080/tcp
-ENTRYPOINT ["dotnet", "Apache.OpenWhisk.Runtime.Dotnet.Minimal.dll"]
diff --git a/core/dotnet3.1/QUICKSTART.md b/core/dotnet3.1/QUICKSTART.md
deleted file mode 100644
index 02cbfda..0000000
--- a/core/dotnet3.1/QUICKSTART.md
+++ /dev/null
@@ -1,238 +0,0 @@
-<!--
-#
-# Licensed to the Apache Software Foundation (ASF) under one or more
-# contributor license agreements. See the NOTICE file distributed with
-# this work for additional information regarding copyright ownership.
-# The ASF licenses this file to You 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.
-#
--->
-
-# Quick .NET Core 3.1 Action
-
-A .NET Core action is a .NET Core class library with a method called `Main` or
`MainAsync` that has the exact signature as follows:
-
-Synchronous:
-
-```csharp
-public Newtonsoft.Json.Linq.JObject Main(Newtonsoft.Json.Linq.JObject);
-```
-
-Asynchronous:
-
-```csharp
-public async System.Threading.Tasks.Task<Newtonsoft.Json.Linq.JObject>
MainAsync(Newtonsoft.Json.Linq.JObject);
-```
-
-In order to compile, test and archive .NET Core projects, you must have the
[.NET Core SDK](https://www.microsoft.com/net/download) installed locally and
the environment variable `DOTNET_HOME` set to the location where the `dotnet`
executable can be found.
-
-For example, create a C# project called `Apache.OpenWhisk.Example.Dotnet`:
-
-```bash
-dotnet new classlib -n Apache.OpenWhisk.Example.Dotnet -lang C# -f
netstandard2.1
-cd Apache.OpenWhisk.Example.Dotnet
-```
-
-Install the [Newtonsoft.Json](https://www.newtonsoft.com/json) NuGet package
as follows:
-
-```bash
-dotnet add package Newtonsoft.Json -v 13.0.1
-```
-
-Now create a file called `Hello.cs` with the following content:
-
-Synchronous example:
-
-```csharp
-using System;
-using Newtonsoft.Json.Linq;
-
-namespace Apache.OpenWhisk.Example.Dotnet
-{
- public class Hello
- {
- public JObject Main(JObject args)
- {
- string name = "stranger";
- if (args.ContainsKey("name")) {
- name = args["name"].ToString();
- }
- JObject message = new JObject();
- message.Add("greeting", new JValue($"Hello, {name}!"));
- return (message);
- }
- }
-}
-```
-
-Asynchronous example:
-
-```csharp
-using System;
-using Newtonsoft.Json.Linq;
-using System.Threading.Tasks;
-
-namespace Apache.OpenWhisk.Example.Dotnet
-{
- public class Hello
- {
- public async Task<JObject> MainAsync(JObject args)
- {
- await Task.Delay(10); // Just do a delay to have an async/await
process occur.
- string name = "stranger";
- if (args.ContainsKey("name")) {
- name = args["name"].ToString();
- }
- JObject message = new JObject();
- message.Add("greeting", new JValue($"Hello, {name}!"));
- return (message);
- }
- }
-}
-```
-
-Publish the project as follows:
-
-```bash
-dotnet publish -c Release -o out
-```
-
-Zip the published files as follows:
-
-```bash
-cd out
-zip -r -0 helloDotNet.zip *
-```
-
-You need to specify the name of the function handler using `--main` argument.
-The value for `main` needs to be in the following format:
-`{Assembly}::{Class Full Name}::{Method}`, e.q.:
-
-+ Synchronous:
`Apache.OpenWhisk.Example.Dotnet::Apache.OpenWhisk.Example.Dotnet.Hello::Main`
-+ Asynchronous:
`Apache.OpenWhisk.Example.Dotnet::Apache.OpenWhisk.Example.Dotnet.Hello::MainAsync`
-
-## Create the .NET Core Action
-
-To use on a deployment of OpenWhisk that contains the runtime as a kind:
-
-Synchronous:
-
-```bash
-wsk action update helloDotNet helloDotNet.zip --main
Apache.OpenWhisk.Example.Dotnet::Apache.OpenWhisk.Example.Dotnet.Hello::Main
--kind dotnet:3.1
-```
-
-Asynchronous:
-
-```bash
-wsk action update helloDotNet helloDotNet.zip --main
Apache.OpenWhisk.Example.Dotnet::Apache.OpenWhisk.Example.Dotnet.Hello::MainAsync
--kind dotnet:3.1
-```
-
-## Invoke the .NET Core Action
-
-Action invocation is the same for .NET Core actions as it is for Swift and
JavaScript actions:
-
-```bash
-wsk action invoke --result helloDotNet --param name World
-```
-
-```json
- {
- "greeting": "Hello World!"
- }
-```
-
-## Local Development
-
-```bash
-./gradlew core:dotnet3.1:distDocker
-```
-
-This will produce the image `whisk/action-dotnet-v3.1`
-
-Build and Push image
-
-```bash
-docker login
-./gradlew core:action-dotnet-v3.1:distDocker -PdockerImagePrefix=$prefix-user
-PdockerRegistry=docker.io
-```
-
-Deploy OpenWhisk using ansible environment that contains the kind `dotnet:3.1`
-Assuming you have OpenWhisk already deploy locally and `OPENWHISK_HOME`
pointing to root directory of OpenWhisk core repository.
-
-Set `ROOTDIR` to the root directory of this repository.
-
-Redeploy OpenWhisk
-
-```bash
-cd $OPENWHISK_HOME/ansible
-ANSIBLE_CMD="ansible-playbook -i ${ROOTDIR}/ansible/environments/local"
-$ANSIBLE_CMD setup.yml
-$ANSIBLE_CMD couchdb.yml
-$ANSIBLE_CMD initdb.yml
-$ANSIBLE_CMD wipe.yml
-$ANSIBLE_CMD openwhisk.yml
-```
-
-Or you can use `wskdev` and create a soft link to the target ansible
environment, for example:
-
-```bash
-ln -s ${ROOTDIR}/ansible/environments/local
${OPENWHISK_HOME}/ansible/environments/local-dotnet
-wskdev fresh -t local-dotnet
-```
-
-### Testing
-
-Install dependencies from the root directory on $OPENWHISK_HOME repository
-
-```bash
-pushd $OPENWHISK_HOME
-./gradlew install
-popd
-```
-
-Using gradle to run all tests
-
-```bash
-./gradlew :tests:test
-```
-
-Using gradle to run some tests
-
-```bash
-./gradlew :tests:test --tests DotNet3_1ActionContainerTests
-```
-
-Using IntelliJ:
-
-- Import project as gradle project.
-- Make sure working directory is root of the project/repo
-
-#### Using Container Image To Test
-
-To use as docker action push to your own dockerhub account
-
-```bash
-docker tag whisk/action-dotnet-v3.1 $user_prefix/action-dotnet-v3.1
-docker push $user_prefix/action-dotnet-v3.1
-```
-
-Then create the action using your the image from dockerhub
-
-```bash
-wsk action update helloDotNet helloDotNet.zip --main
Apache.OpenWhisk.Example.Dotnet::Apache.OpenWhisk.Example.Dotnet.Hello::Main
--docker $user_prefix/action-dotnet-v3.1
-```
-
-The `$user_prefix` is usually your dockerhub user id.
-
-# License
-
-[Apache 2.0](../../LICENSE.txt)
diff --git a/core/dotnet3.1/build.gradle b/core/dotnet3.1/build.gradle
deleted file mode 100644
index 48d3de4..0000000
--- a/core/dotnet3.1/build.gradle
+++ /dev/null
@@ -1,20 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements. See the NOTICE file distributed with
- * this work for additional information regarding copyright ownership.
- * The ASF licenses this file to You 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.
- */
-
-ext.dockerImageName = 'action-dotnet-v3.1'
-
-apply from: '../../gradle/docker.gradle'
diff --git
a/core/dotnet3.1/proxy/Apache.OpenWhisk.Runtime.Common/Apache.OpenWhisk.Runtime.Common.csproj
b/core/dotnet3.1/proxy/Apache.OpenWhisk.Runtime.Common/Apache.OpenWhisk.Runtime.Common.csproj
deleted file mode 100644
index 719d367..0000000
---
a/core/dotnet3.1/proxy/Apache.OpenWhisk.Runtime.Common/Apache.OpenWhisk.Runtime.Common.csproj
+++ /dev/null
@@ -1,33 +0,0 @@
-<!--
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements. See the NOTICE file distributed with
- * this work for additional information regarding copyright ownership.
- * The ASF licenses this file to You 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.
--->
-<Project Sdk="Microsoft.NET.Sdk">
-
- <PropertyGroup>
- <TargetFramework>netcoreapp3.1</TargetFramework>
- </PropertyGroup>
-
- <ItemGroup>
- <FrameworkReference Include="Microsoft.AspNetCore.App" />
- </ItemGroup>
-
- <ItemGroup>
- <PackageReference Include="Newtonsoft.Json">
- <Version>13.0.1</Version>
- </PackageReference>
- </ItemGroup>
-
-</Project>
diff --git
a/core/dotnet3.1/proxy/Apache.OpenWhisk.Runtime.Common/HttpResponseExtension.cs
b/core/dotnet3.1/proxy/Apache.OpenWhisk.Runtime.Common/HttpResponseExtension.cs
deleted file mode 100644
index 4f63bd0..0000000
---
a/core/dotnet3.1/proxy/Apache.OpenWhisk.Runtime.Common/HttpResponseExtension.cs
+++ /dev/null
@@ -1,43 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements. See the NOTICE file distributed with
- * this work for additional information regarding copyright ownership.
- * The ASF licenses this file to You 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.
- */
-
-using System.Text;
-using System.Threading.Tasks;
-using Microsoft.AspNetCore.Http;
-using Newtonsoft.Json;
-using Newtonsoft.Json.Linq;
-
-namespace Apache.OpenWhisk.Runtime.Common
-{
- public static class HttpResponseExtension
- {
- public static async Task WriteResponse(this HttpResponse response, int
code, string content)
- {
- byte[] bytes = Encoding.UTF8.GetBytes(content);
- response.ContentLength = bytes.Length;
- response.StatusCode = code;
- await response.WriteAsync(content);
- }
-
- public static async Task WriteError(this HttpResponse response, string
errorMessage)
- {
- JObject message = new JObject {{"error", new
JValue(errorMessage)}};
- await WriteResponse(response, 502,
JsonConvert.SerializeObject(message));
- }
-
- }
-}
diff --git a/core/dotnet3.1/proxy/Apache.OpenWhisk.Runtime.Common/Init.cs
b/core/dotnet3.1/proxy/Apache.OpenWhisk.Runtime.Common/Init.cs
deleted file mode 100644
index 0a1a054..0000000
--- a/core/dotnet3.1/proxy/Apache.OpenWhisk.Runtime.Common/Init.cs
+++ /dev/null
@@ -1,192 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements. See the NOTICE file distributed with
- * this work for additional information regarding copyright ownership.
- * The ASF licenses this file to You 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.
- */
-
-using System;
-using System.IO;
-using System.IO.Compression;
-using System.Reflection;
-using System.Threading;
-using System.Threading.Tasks;
-using System.Collections.Generic;
-using Microsoft.AspNetCore.Http;
-using Newtonsoft.Json.Linq;
-
-namespace Apache.OpenWhisk.Runtime.Common
-{
- public class Init
- {
- private readonly SemaphoreSlim _initSemaphoreSlim = new
SemaphoreSlim(1, 1);
-
- public bool Initialized { get; private set; }
- private Type Type { get; set; }
- private MethodInfo Method { get; set; }
- private ConstructorInfo Constructor { get; set; }
- private bool AwaitableMethod { get; set; }
-
- public Init()
- {
- Initialized = false;
- Type = null;
- Method = null;
- Constructor = null;
- }
-
- public async Task<Run> HandleRequest(HttpContext httpContext)
- {
- await _initSemaphoreSlim.WaitAsync();
- try
- {
- if (Initialized)
- {
- await httpContext.Response.WriteError("Cannot initialize
the action more than once.");
- Console.Error.WriteLine("Cannot initialize the action more
than once.");
- return (new Run(Type, Method, Constructor,
AwaitableMethod));
- }
-
- string body = await new
StreamReader(httpContext.Request.Body).ReadToEndAsync();
- JObject inputObject = JObject.Parse(body);
- if (!inputObject.ContainsKey("value"))
- {
- await httpContext.Response.WriteError("Missing main/no
code to execute.");
- return (null);
- }
-
- JToken message = inputObject["value"];
-
- if (message["main"] == null || message["binary"] == null ||
message["code"] == null)
- {
- await httpContext.Response.WriteError("Missing main/no
code to execute.");
- return (null);
- }
-
- string main = message["main"].ToString();
-
- bool binary = message["binary"].ToObject<bool>();
-
- if (!binary)
- {
- await httpContext.Response.WriteError("code must be binary
(zip file).");
- return (null);
- }
-
- string[] mainParts = main.Split("::");
- if (mainParts.Length != 3)
- {
- await httpContext.Response.WriteError("main required
format is \"Assembly::Type::Function\".");
- return (null);
- }
-
- string tempPath = Path.Combine(Environment.CurrentDirectory,
Guid.NewGuid().ToString());
- string base64Zip = message["code"].ToString();
- try
- {
- using (MemoryStream stream = new
MemoryStream(Convert.FromBase64String(base64Zip)))
- {
- using (ZipArchive archive = new ZipArchive(stream))
- {
- archive.ExtractToDirectory(tempPath);
- }
- }
- }
- catch (Exception)
- {
- await httpContext.Response.WriteError("Unable to
decompress package.");
- return (null);
- }
-
- Environment.CurrentDirectory = tempPath;
-
- string assemblyFile = $"{mainParts[0]}.dll";
-
- string assemblyPath = Path.Combine(tempPath, assemblyFile);
-
- if (!File.Exists(assemblyPath))
- {
- await httpContext.Response.WriteError($"Unable to locate
requested assembly (\"{assemblyFile}\").");
- return (null);
- }
-
- try
- {
- // Export init arguments as environment variables
- if (message["env"] != null && message["env"].HasValues)
- {
- Dictionary<string, string> dictEnv =
message["env"].ToObject<Dictionary<string, string>>();
- foreach (KeyValuePair<string, string> entry in
dictEnv) {
- // See
https://docs.microsoft.com/en-us/dotnet/api/system.environment.setenvironmentvariable
- // If entry.Value is null or the empty string, the
variable is not set
- Environment.SetEnvironmentVariable(entry.Key,
entry.Value);
- }
- }
-
- Assembly assembly = Assembly.LoadFrom(assemblyPath);
- Type = assembly.GetType(mainParts[1]);
- if (Type == null)
- {
- await httpContext.Response.WriteError($"Unable to
locate requested type (\"{mainParts[1]}\").");
- return (null);
- }
- Method = Type.GetMethod(mainParts[2]);
- Constructor = Type.GetConstructor(Type.EmptyTypes);
- }
- catch (Exception ex)
- {
- Console.Error.WriteLine(ex.ToString());
- await httpContext.Response.WriteError(ex.Message
-#if DEBUG
- + ", " +
ex.StackTrace
-#endif
- );
- return (null);
- }
-
- if (Method == null)
- {
- await httpContext.Response.WriteError($"Unable to locate
requested method (\"{mainParts[2]}\").");
- return (null);
- }
-
- if (Constructor == null)
- {
- await httpContext.Response.WriteError($"Unable to locate
appropriate constructor for (\"{mainParts[1]}\").");
- return (null);
- }
-
- Initialized = true;
-
- AwaitableMethod =
(Method.ReturnType.GetMethod(nameof(Task.GetAwaiter)) != null);
-
- return (new Run(Type, Method, Constructor, AwaitableMethod));
- }
- catch (Exception ex)
- {
- Console.Error.WriteLine(ex.StackTrace);
- await httpContext.Response.WriteError(ex.Message
-#if DEBUG
- + ", " + ex.StackTrace
-#endif
- );
- Startup.WriteLogMarkers();
- return (null);
- }
- finally
- {
- _initSemaphoreSlim.Release();
- }
- }
- }
-}
diff --git a/core/dotnet3.1/proxy/Apache.OpenWhisk.Runtime.Common/Run.cs
b/core/dotnet3.1/proxy/Apache.OpenWhisk.Runtime.Common/Run.cs
deleted file mode 100644
index 0ee99ce..0000000
--- a/core/dotnet3.1/proxy/Apache.OpenWhisk.Runtime.Common/Run.cs
+++ /dev/null
@@ -1,130 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements. See the NOTICE file distributed with
- * this work for additional information regarding copyright ownership.
- * The ASF licenses this file to You 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.
- */
-
-using System;
-using System.IO;
-using System.Reflection;
-using System.Threading.Tasks;
-using Microsoft.AspNetCore.Http;
-using Newtonsoft.Json.Linq;
-
-namespace Apache.OpenWhisk.Runtime.Common
-{
- public class Run
- {
- private readonly Type _type;
- private readonly MethodInfo _method;
- private readonly ConstructorInfo _constructor;
- private readonly bool _awaitableMethod;
-
- public Run(Type type, MethodInfo method, ConstructorInfo constructor,
bool awaitableMethod)
- {
- _type = type;
- _method = method;
- _constructor = constructor;
- _awaitableMethod = awaitableMethod;
- }
-
- public async Task HandleRequest(HttpContext httpContext)
- {
- if (_type == null || _method == null || _constructor == null)
- {
- await httpContext.Response.WriteError("Cannot invoke an
uninitialized action.");
- return;
- }
-
- try
- {
- string body = await new
StreamReader(httpContext.Request.Body).ReadToEndAsync();
-
- JObject inputObject = string.IsNullOrEmpty(body) ? null :
JObject.Parse(body);
-
- JObject valObject = null;
- JArray valArray = null;
-
- if (inputObject != null)
- {
- valObject = inputObject["value"] as JObject;
- foreach (JToken token in inputObject.Children())
- {
- try
- {
- if (token.Path.Equals("value",
StringComparison.InvariantCultureIgnoreCase))
- continue;
- string envKey =
$"__OW_{token.Path.ToUpperInvariant()}";
- string envVal = token.First.ToString();
- Environment.SetEnvironmentVariable(envKey, envVal);
- //Console.WriteLine($"Set environment variable
\"{envKey}\" to \"{envVal}\".");
- }
- catch (Exception)
- {
- await Console.Error.WriteLineAsync(
- $"Unable to set environment variable for the
\"{token.Path}\" token.");
- }
- }
- if (valObject == null) {
- valArray = inputObject["value"] as JArray;
- }
- }
-
- object owObject = _constructor.Invoke(new object[] { });
-
- try
- {
- JContainer output;
-
- if(_awaitableMethod) {
- if (valObject != null) {
- output = (JContainer) await (dynamic)
_method.Invoke(owObject, new object[] {valObject});
- } else {
- output = (JContainer) await (dynamic)
_method.Invoke(owObject, new object[] {valArray});
- }
- }
- else {
- if (valObject != null) {
- output = (JContainer) _method.Invoke(owObject, new
object[] {valObject});
- } else {
- output = (JContainer) _method.Invoke(owObject, new
object[] {valArray});
- }
- }
-
- if (output == null)
- {
- await httpContext.Response.WriteError("The action
returned null");
- Console.Error.WriteLine("The action returned null");
- return;
- }
-
- await httpContext.Response.WriteResponse(200,
output.ToString());
- }
- catch (Exception ex)
- {
- Console.Error.WriteLine(ex.StackTrace);
- await httpContext.Response.WriteError(ex.Message
-#if DEBUG
- + ", " +
ex.StackTrace
-#endif
- );
- }
- }
- finally
- {
- Startup.WriteLogMarkers();
- }
- }
- }
-}
diff --git a/core/dotnet3.1/proxy/Apache.OpenWhisk.Runtime.Common/Startup.cs
b/core/dotnet3.1/proxy/Apache.OpenWhisk.Runtime.Common/Startup.cs
deleted file mode 100644
index 9851e54..0000000
--- a/core/dotnet3.1/proxy/Apache.OpenWhisk.Runtime.Common/Startup.cs
+++ /dev/null
@@ -1,70 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements. See the NOTICE file distributed with
- * this work for additional information regarding copyright ownership.
- * The ASF licenses this file to You 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.
- */
-
-using System;
-using Microsoft.AspNetCore.Builder;
-using Microsoft.AspNetCore.Http;
-
-namespace Apache.OpenWhisk.Runtime.Common
-{
- public class Startup
- {
- public static void WriteLogMarkers()
- {
- Console.WriteLine("XXX_THE_END_OF_A_WHISK_ACTIVATION_XXX");
- Console.Error.WriteLine("XXX_THE_END_OF_A_WHISK_ACTIVATION_XXX");
- }
-
- public void Configure(IApplicationBuilder app)
- {
- PathString initPath = new PathString("/init");
- PathString runPath = new PathString("/run");
- Init init = new Init();
- Run run = null;
- app.Run(async (httpContext) =>
- {
- if (httpContext.Request.Path.Equals(initPath))
- {
- run = await init.HandleRequest(httpContext);
-
- if (run != null)
- await httpContext.Response.WriteResponse(200,
"OK");
-
- return;
- }
-
- if (httpContext.Request.Path.Equals(runPath))
- {
- if (!init.Initialized)
- {
- await httpContext.Response.WriteError("Cannot
invoke an uninitialized action.");
- return;
- }
-
- if (run == null)
- {
- await httpContext.Response.WriteError("Cannot
invoke an uninitialized action.");
- return;
- }
-
- await run.HandleRequest(httpContext);
- }
- }
- );
- }
- }
-}
diff --git
a/core/dotnet3.1/proxy/Apache.OpenWhisk.Runtime.Dotnet.Minimal/Apache.OpenWhisk.Runtime.Dotnet.Minimal.csproj
b/core/dotnet3.1/proxy/Apache.OpenWhisk.Runtime.Dotnet.Minimal/Apache.OpenWhisk.Runtime.Dotnet.Minimal.csproj
deleted file mode 100644
index ce6efa6..0000000
---
a/core/dotnet3.1/proxy/Apache.OpenWhisk.Runtime.Dotnet.Minimal/Apache.OpenWhisk.Runtime.Dotnet.Minimal.csproj
+++ /dev/null
@@ -1,28 +0,0 @@
-<!--
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements. See the NOTICE file distributed with
- * this work for additional information regarding copyright ownership.
- * The ASF licenses this file to You 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.
--->
-<Project Sdk="Microsoft.NET.Sdk">
-
- <PropertyGroup>
- <OutputType>Exe</OutputType>
- <TargetFramework>netcoreapp3.1</TargetFramework>
- </PropertyGroup>
-
- <ItemGroup>
- <ProjectReference
Include="..\Apache.OpenWhisk.Runtime.Common\Apache.OpenWhisk.Runtime.Common.csproj"
/>
- </ItemGroup>
-
-</Project>
diff --git
a/core/dotnet3.1/proxy/Apache.OpenWhisk.Runtime.Dotnet.Minimal/Program.cs
b/core/dotnet3.1/proxy/Apache.OpenWhisk.Runtime.Dotnet.Minimal/Program.cs
deleted file mode 100644
index 6d3c1d0..0000000
--- a/core/dotnet3.1/proxy/Apache.OpenWhisk.Runtime.Dotnet.Minimal/Program.cs
+++ /dev/null
@@ -1,48 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements. See the NOTICE file distributed with
- * this work for additional information regarding copyright ownership.
- * The ASF licenses this file to You 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.
- */
-
-using System;
-using Apache.OpenWhisk.Runtime.Common;
-using Microsoft.AspNetCore;
-using Microsoft.AspNetCore.Hosting;
-using Microsoft.Extensions.Logging;
-
-namespace Apache.OpenWhisk.Runtime.Dotnet.Minimal
-{
- class Program
- {
- static void Main(string[] args)
- {
- CreateWebHostBuilder(args).Build().Run();
- }
-
- public static IWebHostBuilder CreateWebHostBuilder(string[] args) =>
- WebHost.CreateDefaultBuilder(args)
- .UseKestrel(options =>
- {
- options.Limits.MaxRequestBodySize = null;
- })
- .ConfigureLogging((hostingContext, logging) =>
- {
- logging.ClearProviders();
- })
- .SuppressStatusMessages(true)
- .UseStartup<Startup>();
-
- }
-}
-
diff --git a/core/dotnet3.1/proxy/build.gradle
b/core/dotnet3.1/proxy/build.gradle
deleted file mode 100644
index 6a5d94e..0000000
--- a/core/dotnet3.1/proxy/build.gradle
+++ /dev/null
@@ -1,28 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements. See the NOTICE file distributed with
- * this work for additional information regarding copyright ownership.
- * The ASF licenses this file to You 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.
- */
-
-plugins {
- id "net.karlmartens.dotnet" version "0.2.20"
-}
-
-repositories {
- mavenCentral()
-}
-
-dotnet {
- configuration 'Release'
-}
diff --git a/core/dotnet3.1/proxy/gradle/wrapper/gradle-wrapper.jar
b/core/dotnet3.1/proxy/gradle/wrapper/gradle-wrapper.jar
deleted file mode 100644
index f6b961f..0000000
Binary files a/core/dotnet3.1/proxy/gradle/wrapper/gradle-wrapper.jar and
/dev/null differ
diff --git a/core/dotnet3.1/proxy/gradle/wrapper/gradle-wrapper.properties
b/core/dotnet3.1/proxy/gradle/wrapper/gradle-wrapper.properties
deleted file mode 100644
index d475d27..0000000
--- a/core/dotnet3.1/proxy/gradle/wrapper/gradle-wrapper.properties
+++ /dev/null
@@ -1,21 +0,0 @@
-#
-# Licensed to the Apache Software Foundation (ASF) under one or more
-# contributor license agreements. See the NOTICE file distributed with
-# this work for additional information regarding copyright ownership.
-# The ASF licenses this file to You 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.
-#
-distributionBase=GRADLE_USER_HOME
-distributionPath=wrapper/dists
-zipStoreBase=GRADLE_USER_HOME
-zipStorePath=wrapper/dists
-distributionUrl=https\://services.gradle.org/distributions/gradle-5.5.1-bin.zip
diff --git a/core/dotnet3.1/proxy/gradlew b/core/dotnet3.1/proxy/gradlew
deleted file mode 100644
index d4ee78f..0000000
--- a/core/dotnet3.1/proxy/gradlew
+++ /dev/null
@@ -1,188 +0,0 @@
-#!/usr/bin/env sh
-
-#
-# Copyright 2015 the original author or authors.
-#
-# 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.
-#
-
-##############################################################################
-##
-## Gradle start up script for UN*X
-##
-##############################################################################
-
-# Attempt to set APP_HOME
-# Resolve links: $0 may be a link
-PRG="$0"
-# Need this for relative symlinks.
-while [ -h "$PRG" ] ; do
- ls=`ls -ld "$PRG"`
- link=`expr "$ls" : '.*-> \(.*\)$'`
- if expr "$link" : '/.*' > /dev/null; then
- PRG="$link"
- else
- PRG=`dirname "$PRG"`"/$link"
- fi
-done
-SAVED="`pwd`"
-cd "`dirname \"$PRG\"`/" >/dev/null
-APP_HOME="`pwd -P`"
-cd "$SAVED" >/dev/null
-
-APP_NAME="Gradle"
-APP_BASE_NAME=`basename "$0"`
-
-# Add default JVM options here. You can also use JAVA_OPTS and GRADLE_OPTS to
pass JVM options to this script.
-DEFAULT_JVM_OPTS='-Dfile.encoding=UTF-8'
-
-# Use the maximum available, or set MAX_FD != -1 to use that value.
-MAX_FD="maximum"
-
-warn () {
- echo "$*"
-}
-
-die () {
- echo
- echo "$*"
- echo
- exit 1
-}
-
-# OS specific support (must be 'true' or 'false').
-cygwin=false
-msys=false
-darwin=false
-nonstop=false
-case "`uname`" in
- CYGWIN* )
- cygwin=true
- ;;
- Darwin* )
- darwin=true
- ;;
- MINGW* )
- msys=true
- ;;
- NONSTOP* )
- nonstop=true
- ;;
-esac
-
-CLASSPATH=$APP_HOME/gradle/wrapper/gradle-wrapper.jar
-
-# Determine the Java command to use to start the JVM.
-if [ -n "$JAVA_HOME" ] ; then
- if [ -x "$JAVA_HOME/jre/sh/java" ] ; then
- # IBM's JDK on AIX uses strange locations for the executables
- JAVACMD="$JAVA_HOME/jre/sh/java"
- else
- JAVACMD="$JAVA_HOME/bin/java"
- fi
- if [ ! -x "$JAVACMD" ] ; then
- die "ERROR: JAVA_HOME is set to an invalid directory: $JAVA_HOME
-
-Please set the JAVA_HOME variable in your environment to match the
-location of your Java installation."
- fi
-else
- JAVACMD="java"
- which java >/dev/null 2>&1 || die "ERROR: JAVA_HOME is not set and no
'java' command could be found in your PATH.
-
-Please set the JAVA_HOME variable in your environment to match the
-location of your Java installation."
-fi
-
-# Increase the maximum file descriptors if we can.
-if [ "$cygwin" = "false" -a "$darwin" = "false" -a "$nonstop" = "false" ] ;
then
- MAX_FD_LIMIT=`ulimit -H -n`
- if [ $? -eq 0 ] ; then
- if [ "$MAX_FD" = "maximum" -o "$MAX_FD" = "max" ] ; then
- MAX_FD="$MAX_FD_LIMIT"
- fi
- ulimit -n $MAX_FD
- if [ $? -ne 0 ] ; then
- warn "Could not set maximum file descriptor limit: $MAX_FD"
- fi
- else
- warn "Could not query maximum file descriptor limit: $MAX_FD_LIMIT"
- fi
-fi
-
-# For Darwin, add options to specify how the application appears in the dock
-if $darwin; then
- GRADLE_OPTS="$GRADLE_OPTS \"-Xdock:name=$APP_NAME\"
\"-Xdock:icon=$APP_HOME/media/gradle.icns\""
-fi
-
-# For Cygwin, switch paths to Windows format before running java
-if $cygwin ; then
- APP_HOME=`cygpath --path --mixed "$APP_HOME"`
- CLASSPATH=`cygpath --path --mixed "$CLASSPATH"`
- JAVACMD=`cygpath --unix "$JAVACMD"`
-
- # We build the pattern for arguments to be converted via cygpath
- ROOTDIRSRAW=`find -L / -maxdepth 1 -mindepth 1 -type d 2>/dev/null`
- SEP=""
- for dir in $ROOTDIRSRAW ; do
- ROOTDIRS="$ROOTDIRS$SEP$dir"
- SEP="|"
- done
- OURCYGPATTERN="(^($ROOTDIRS))"
- # Add a user-defined pattern to the cygpath arguments
- if [ "$GRADLE_CYGPATTERN" != "" ] ; then
- OURCYGPATTERN="$OURCYGPATTERN|($GRADLE_CYGPATTERN)"
- fi
- # Now convert the arguments - kludge to limit ourselves to /bin/sh
- i=0
- for arg in "$@" ; do
- CHECK=`echo "$arg"|egrep -c "$OURCYGPATTERN" -`
- CHECK2=`echo "$arg"|egrep -c "^-"` ###
Determine if an option
-
- if [ $CHECK -ne 0 ] && [ $CHECK2 -eq 0 ] ; then ###
Added a condition
- eval `echo args$i`=`cygpath --path --ignore --mixed "$arg"`
- else
- eval `echo args$i`="\"$arg\""
- fi
- i=$((i+1))
- done
- case $i in
- (0) set -- ;;
- (1) set -- "$args0" ;;
- (2) set -- "$args0" "$args1" ;;
- (3) set -- "$args0" "$args1" "$args2" ;;
- (4) set -- "$args0" "$args1" "$args2" "$args3" ;;
- (5) set -- "$args0" "$args1" "$args2" "$args3" "$args4" ;;
- (6) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" ;;
- (7) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5"
"$args6" ;;
- (8) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5"
"$args6" "$args7" ;;
- (9) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5"
"$args6" "$args7" "$args8" ;;
- esac
-fi
-
-# Escape application args
-save () {
- for i do printf %s\\n "$i" | sed "s/'/'\\\\''/g;1s/^/'/;\$s/\$/' \\\\/" ;
done
- echo " "
-}
-APP_ARGS=$(save "$@")
-
-# Collect all arguments for the java command, following the shell quoting and
substitution rules
-eval set -- $DEFAULT_JVM_OPTS $JAVA_OPTS $GRADLE_OPTS
"\"-Dorg.gradle.appname=$APP_BASE_NAME\"" -classpath "\"$CLASSPATH\""
org.gradle.wrapper.GradleWrapperMain "$APP_ARGS"
-
-# by default we should be in the correct project dir, but when run from Finder
on Mac, the cwd is wrong
-if [ "$(uname)" = "Darwin" ] && [ "$HOME" = "$PWD" ]; then
- cd "$(dirname "$0")"
-fi
-
-exec "$JAVACMD" "$@"
diff --git a/core/dotnet3.1/proxy/gradlew.bat b/core/dotnet3.1/proxy/gradlew.bat
deleted file mode 100644
index 9991c50..0000000
--- a/core/dotnet3.1/proxy/gradlew.bat
+++ /dev/null
@@ -1,100 +0,0 @@
-@rem
-@rem Copyright 2015 the original author or authors.
-@rem
-@rem Licensed under the Apache License, Version 2.0 (the "License");
-@rem you may not use this file except in compliance with the License.
-@rem You may obtain a copy of the License at
-@rem
-@rem http://www.apache.org/licenses/LICENSE-2.0
-@rem
-@rem Unless required by applicable law or agreed to in writing, software
-@rem distributed under the License is distributed on an "AS IS" BASIS,
-@rem WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-@rem See the License for the specific language governing permissions and
-@rem limitations under the License.
-@rem
-
-@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="-Xmx64m" "-Xms64m"
-
-@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/core/dotnet3.1/proxy/openwhisk-runtime-dotnet.sln
b/core/dotnet3.1/proxy/openwhisk-runtime-dotnet.sln
deleted file mode 100644
index 25e60cc..0000000
--- a/core/dotnet3.1/proxy/openwhisk-runtime-dotnet.sln
+++ /dev/null
@@ -1,39 +0,0 @@
-Microsoft Visual Studio Solution File, Format Version 12.00
-
-#
-# Licensed to the Apache Software Foundation (ASF) under one or more
-# contributor license agreements. See the NOTICE file distributed with
-# this work for additional information regarding copyright ownership.
-# The ASF licenses this file to You 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.
-#
-
-Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") =
"Apache.OpenWhisk.Runtime.Dotnet.Minimal",
"Apache.OpenWhisk.Runtime.Dotnet.Minimal\Apache.OpenWhisk.Runtime.Dotnet.Minimal.csproj",
"{F76F51C9-EB3B-4D4C-89C0-A71E0BEF88DC}"
-EndProject
-Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") =
"Apache.OpenWhisk.Runtime.Common",
"Apache.OpenWhisk.Runtime.Common\Apache.OpenWhisk.Runtime.Common.csproj",
"{26ADD70B-3101-4943-982C-16D380D4B044}"
-EndProject
-Global
- GlobalSection(SolutionConfigurationPlatforms) = preSolution
- Debug|Any CPU = Debug|Any CPU
- Release|Any CPU = Release|Any CPU
- EndGlobalSection
- GlobalSection(ProjectConfigurationPlatforms) = postSolution
- {F76F51C9-EB3B-4D4C-89C0-A71E0BEF88DC}.Debug|Any CPU.ActiveCfg
= Debug|Any CPU
- {F76F51C9-EB3B-4D4C-89C0-A71E0BEF88DC}.Debug|Any CPU.Build.0 =
Debug|Any CPU
- {F76F51C9-EB3B-4D4C-89C0-A71E0BEF88DC}.Release|Any
CPU.ActiveCfg = Release|Any CPU
- {F76F51C9-EB3B-4D4C-89C0-A71E0BEF88DC}.Release|Any CPU.Build.0
= Release|Any CPU
- {26ADD70B-3101-4943-982C-16D380D4B044}.Debug|Any CPU.ActiveCfg
= Debug|Any CPU
- {26ADD70B-3101-4943-982C-16D380D4B044}.Debug|Any CPU.Build.0 =
Debug|Any CPU
- {26ADD70B-3101-4943-982C-16D380D4B044}.Release|Any
CPU.ActiveCfg = Release|Any CPU
- {26ADD70B-3101-4943-982C-16D380D4B044}.Release|Any CPU.Build.0
= Release|Any CPU
- EndGlobalSection
-EndGlobal
diff --git a/core/net6.0/QUICKSTART.md b/core/net6.0/QUICKSTART.md
index f596a3f..1e62f29 100644
--- a/core/net6.0/QUICKSTART.md
+++ b/core/net6.0/QUICKSTART.md
@@ -153,7 +153,7 @@ wsk action invoke --result helloDotNet --param name World
## Local Development
```bash
-./gradlew core:dotnet3.1:distDocker
+./gradlew core:net6.0:distDocker
```
This will produce the image `whisk/action-dotnet-v6.0`
diff --git a/settings.gradle b/settings.gradle
index 0515e6e..9fb37cf 100644
--- a/settings.gradle
+++ b/settings.gradle
@@ -16,12 +16,8 @@
*/
include ':tests'
-include ':tests:dotnet3.1'
include ':tests:net6.0'
-include ':core:dotnet3.1'
-include ':core:dotnet3.1:proxy'
-
include ':core:net6.0'
include ':core:net6.0:proxy'
diff --git a/tests/build.gradle b/tests/build.gradle
index d846cac..e6726fd 100644
--- a/tests/build.gradle
+++ b/tests/build.gradle
@@ -52,6 +52,5 @@ tasks.withType(ScalaCompile) {
}
compileTestScala {
- dependsOn ':tests:dotnet3.1:prepare'
dependsOn ':tests:net6.0:prepare'
}
diff --git
a/tests/dotnet3.1/Apache.OpenWhisk.Tests.Dotnet/Apache.OpenWhisk.Tests.Dotnet.csproj
b/tests/dotnet3.1/Apache.OpenWhisk.Tests.Dotnet/Apache.OpenWhisk.Tests.Dotnet.csproj
deleted file mode 100644
index 757d77a..0000000
---
a/tests/dotnet3.1/Apache.OpenWhisk.Tests.Dotnet/Apache.OpenWhisk.Tests.Dotnet.csproj
+++ /dev/null
@@ -1,32 +0,0 @@
-<!--
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements. See the NOTICE file distributed with
- * this work for additional information regarding copyright ownership.
- * The ASF licenses this file to You 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.
--->
-<Project Sdk="Microsoft.NET.Sdk">
-
- <PropertyGroup>
- <TargetFramework>netstandard2.1</TargetFramework>
- </PropertyGroup>
-
- <ItemGroup>
- <PackageReference Include="Newtonsoft.Json" Version="13.0.1" />
- </ItemGroup>
-
- <ItemGroup>
- <Compile Include="..\..\dotnetshared\*.cs">
- </Compile>
- </ItemGroup>
-
-</Project>
diff --git a/tests/dotnet3.1/build.gradle b/tests/dotnet3.1/build.gradle
deleted file mode 100644
index c23a22c..0000000
--- a/tests/dotnet3.1/build.gradle
+++ /dev/null
@@ -1,51 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements. See the NOTICE file distributed with
- * this work for additional information regarding copyright ownership.
- * The ASF licenses this file to You 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.
- */
-
-plugins {
- id "net.karlmartens.dotnet" version "0.2.20"
-}
-
-repositories {
- mavenCentral()
-}
-
-dotnet {
- configuration 'Release'
-}
-
-task prepare_distro(dependsOn: distribution) {
- doLast {
- copy {
- from tarTree(resources.gzip(file('build/dist/netstandard2.1.tar.gz')))
- into file('build/dist/out')
- }
- delete file('build/dist/netstandard2.1.tar.gz')
- }
-}
-
-task prepare_zip(type: Zip, dependsOn: prepare_distro) {
- from file('build/dist/out')
- include '*'
- include '**/**'
- archiveName 'dotnettests3.1.zip'
- destinationDir(file('../src/test/resources'))
-}
-
-task prepare(type: Delete, dependsOn: prepare_zip) {
- delete getProject().getBuildDir().toPath().toFile()
- followSymlinks = true
-}
diff --git a/tests/dotnet3.1/openwhisk-tests-dotnet.sln
b/tests/dotnet3.1/openwhisk-tests-dotnet.sln
deleted file mode 100644
index 0f4ec0d..0000000
--- a/tests/dotnet3.1/openwhisk-tests-dotnet.sln
+++ /dev/null
@@ -1,33 +0,0 @@
-Microsoft Visual Studio Solution File, Format Version 12.00
-
-#
-# Licensed to the Apache Software Foundation (ASF) under one or more
-# contributor license agreements. See the NOTICE file distributed with
-# this work for additional information regarding copyright ownership.
-# The ASF licenses this file to You 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.
-#
-
-Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") =
"Apache.OpenWhisk.Tests.Dotnet",
"Apache.OpenWhisk.Tests.Dotnet\Apache.OpenWhisk.Tests.Dotnet.csproj",
"{4DA37A8E-7505-4C51-8C75-B18BDA45392C}"
-EndProject
-Global
- GlobalSection(SolutionConfigurationPlatforms) = preSolution
- Debug|Any CPU = Debug|Any CPU
- Release|Any CPU = Release|Any CPU
- EndGlobalSection
- GlobalSection(ProjectConfigurationPlatforms) = postSolution
- {4DA37A8E-7505-4C51-8C75-B18BDA45392C}.Debug|Any CPU.ActiveCfg
= Debug|Any CPU
- {4DA37A8E-7505-4C51-8C75-B18BDA45392C}.Debug|Any CPU.Build.0 =
Debug|Any CPU
- {4DA37A8E-7505-4C51-8C75-B18BDA45392C}.Release|Any
CPU.ActiveCfg = Release|Any CPU
- {4DA37A8E-7505-4C51-8C75-B18BDA45392C}.Release|Any CPU.Build.0
= Release|Any CPU
- EndGlobalSection
-EndGlobal
diff --git
a/tests/src/test/scala/actionContainers/DotNet3_1ActionContainerTests.scala
b/tests/src/test/scala/actionContainers/DotNet3_1ActionContainerTests.scala
deleted file mode 100644
index dc9ee90..0000000
--- a/tests/src/test/scala/actionContainers/DotNet3_1ActionContainerTests.scala
+++ /dev/null
@@ -1,266 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements. See the NOTICE file distributed with
- * this work for additional information regarding copyright ownership.
- * The ASF licenses this file to You 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 actionContainers
-
-import org.junit.runner.RunWith
-import org.scalatest.junit.JUnitRunner
-import common.WskActorSystem
-import spray.json._
-import actionContainers.ActionContainer.withContainer
-import java.nio.file.Paths
-
-@RunWith(classOf[JUnitRunner])
-class DotNet3_1ActionContainerTests extends BasicActionRunnerTests with
WskActorSystem {
- val functionb64 =
ResourceHelpers.readAsBase64(Paths.get(getClass.getResource("/dotnettests3.1.zip").getPath))
-
- // Helpers specific to java actions
- override def withActionContainer(env: Map[String, String] = Map.empty)(
- code: ActionContainer => Unit): (String, String) =
withContainer("action-dotnet-v3.1", env)(code)
-
- behavior of "dotnet action"
-
- override val testNoSourceOrExec = {
- TestConfig("")
- }
-
- override val testNotReturningJson = {
- // skip this test since and add own below (see Nuller)
- TestConfig("", skipTest = true)
- }
-
- override val testEnv = {
- TestConfig(functionb64, main =
"Apache.OpenWhisk.Tests.Dotnet::Apache.OpenWhisk.Tests.Dotnet.Environment::Main")
- }
-
- override val testEnvParameters = {
- TestConfig(functionb64, main =
"Apache.OpenWhisk.Tests.Dotnet::Apache.OpenWhisk.Tests.Dotnet.Init::Main")
- }
-
- override val testEcho = {
- TestConfig(functionb64, main =
"Apache.OpenWhisk.Tests.Dotnet::Apache.OpenWhisk.Tests.Dotnet.AltEcho::Main")
- }
-
- val testEchoNoWrite = {
- TestConfig(functionb64, main =
"Apache.OpenWhisk.Tests.Dotnet::Apache.OpenWhisk.Tests.Dotnet.Echo::MainAsync")
- }
-
- override val testUnicode = {
- TestConfig(functionb64, main =
"Apache.OpenWhisk.Tests.Dotnet::Apache.OpenWhisk.Tests.Dotnet.Unicode::Main")
- }
-
- override val testInitCannotBeCalledMoreThanOnce = testEchoNoWrite
-
- override val testEntryPointOtherThanMain = testEchoNoWrite
-
- override val testLargeInput = testEchoNoWrite
-
- it should "fail to initialize with bad archive" in {
- val (out, err) = withActionContainer() { c =>
- val brokenArchive = ("NOTAVALIDZIPFILE")
-
- val (initCode, initRes) =
- c.init(initPayload(brokenArchive,
"Apache.OpenWhisk.Tests.Dotnet::Apache.OpenWhisk.Tests.Dotnet.Invalid::Main"))
- initCode should not be (200)
-
- initRes shouldBe defined
-
- initRes should {
- be(Some(JsObject("error" -> JsString("Unable to decompress
package."))))
- }
- }
- }
-
- it should "return some error on action error" in {
- val (out, err) = withActionContainer() { c =>
- val (initCode, _) =
- c.init(initPayload(functionb64,
"Apache.OpenWhisk.Tests.Dotnet::Apache.OpenWhisk.Tests.Dotnet.Exception::Main"))
- initCode should be(200)
-
- val (runCode, runRes) = c.run(runPayload(JsObject.empty))
- runCode should not be (200)
-
- runRes shouldBe defined
- runRes.get.fields.get("error") shouldBe defined
- }
-
- checkStreams(out, err, {
- case (o, e) =>
- (o + e).toLowerCase should include("exception")
- })
- }
-
- it should "support a large payload" in {
- val (out, err) = withActionContainer() { c =>
- val payload = functionb64 + (" " * 18000000)
- val (initCode, _) =
- c.init(initPayload(payload,
"Apache.OpenWhisk.Tests.Dotnet::Apache.OpenWhisk.Tests.Dotnet.Error::Main"))
- initCode should be(200)
- }
- }
-
- it should "support application errors" in {
- val (out, err) = withActionContainer() { c =>
- val (initCode, _) =
- c.init(initPayload(functionb64,
"Apache.OpenWhisk.Tests.Dotnet::Apache.OpenWhisk.Tests.Dotnet.Error::Main"))
- initCode should be(200)
-
- val (runCode, runRes) = c.run(runPayload(JsObject.empty))
- runCode should be(200)
-
- runRes shouldBe defined
-
- runRes should {
- be(Some(JsObject("error" -> JsString(".NETCoreApp,Version=v3.1"))))
- }
- }
-
- checkStreams(out, err, {
- case (o, e) =>
- o shouldBe empty
- e shouldBe empty
- })
- }
-
- it should "fails on invalid assembly reference" in {
- val (out, err) = withActionContainer() { c =>
- val (initCode, initRes) = c.init(
- initPayload(functionb64,
"Apache.OpenWhisk.Tests.Dotnet.DoesntExist::Apache.OpenWhisk.Tests.Dotnet.Echo::Main"))
- initCode should be(502)
-
- initRes shouldBe defined
-
- initRes should {
- be(
- Some(JsObject("error" -> JsString(
- "Unable to locate requested assembly
(\"Apache.OpenWhisk.Tests.Dotnet.DoesntExist.dll\")."))))
- }
- }
- }
-
- it should "fails on invalid type reference" in {
- val (out, err) = withActionContainer() { c =>
- val (initCode, initRes) =
- c.init(initPayload(functionb64,
"Apache.OpenWhisk.Tests.Dotnet::Apache.OpenWhisk.Tests.Dotnet.FakeType::Main"))
- initCode should be(502)
-
- initRes should {
- be(
- Some(JsObject(
- "error" -> JsString("Unable to locate requested type
(\"Apache.OpenWhisk.Tests.Dotnet.FakeType\")."))))
- }
- }
- }
-
- it should "fails on invalid method reference" in {
- val (out, err) = withActionContainer() { c =>
- val (initCode, initRes) = c.init(
- initPayload(functionb64,
"Apache.OpenWhisk.Tests.Dotnet::Apache.OpenWhisk.Tests.Dotnet.Echo::FakeMethod"))
- initCode should be(502)
-
- initRes should {
- be(Some(JsObject("error" -> JsString("Unable to locate requested
method (\"FakeMethod\")."))))
- }
- }
- }
-
- it should "fails on type with no empty constructor" in {
- val (out, err) = withActionContainer() { c =>
- val (initCode, initRes) = c.init(
- initPayload(
- functionb64,
-
"Apache.OpenWhisk.Tests.Dotnet::Apache.OpenWhisk.Tests.Dotnet.NonEmptyConstructor::Main"))
- initCode should be(502)
-
- initRes should {
- be(
- Some(JsObject("error" -> JsString(
- "Unable to locate appropriate constructor for
(\"Apache.OpenWhisk.Tests.Dotnet.NonEmptyConstructor\")."))))
- }
- }
- }
-
- it should "validate main string format 1" in {
- val (out, err) = withActionContainer() { c =>
- val (initCode, initRes) = c.init(initPayload(functionb64,
"Apache.OpenWhisk.Tests.Dotnet"))
- initCode should not be (200)
-
- initRes should {
- be(Some(JsObject("error" -> JsString("main required format is
\"Assembly::Type::Function\"."))))
- }
- }
- }
-
- it should "validate main string format 2" in {
- val (out, err) = withActionContainer() { c =>
- val (initCode, initRes) =
- c.init(initPayload(functionb64,
"Apache.OpenWhisk.Tests.Dotnet::Apache.OpenWhisk.Tests.Dotnet.Echo"))
- initCode should not be (200)
-
- initRes should {
- be(Some(JsObject("error" -> JsString("main required format is
\"Assembly::Type::Function\"."))))
- }
- }
- }
-
- it should "enforce that the user returns an object" in {
- val (out, err) = withActionContainer() { c =>
- val (initCode, _) =
- c.init(initPayload(functionb64,
"Apache.OpenWhisk.Tests.Dotnet::Apache.OpenWhisk.Tests.Dotnet.Nuller::Main"))
- initCode should be(200)
-
- val (runCode, runRes) = c.run(runPayload(JsObject.empty))
- runCode should not be (200)
-
- runRes shouldBe defined
- runRes.get.fields.get("error") shouldBe defined
- }
-
- checkStreams(out, err, {
- case (o, e) =>
- (o + e).toLowerCase should include("the action returned null")
- })
- }
-
- it should "support return array result" in {
- val (out, err) = withActionContainer() { c =>
- val (initCode, _) =
- c.init(
- initPayload(functionb64,
"Apache.OpenWhisk.Tests.Dotnet::Apache.OpenWhisk.Tests.Dotnet.HelloArray::Main"))
- initCode should be(200)
-
- val (runCode, runRes) = c.runForJsArray(runPayload(JsObject()))
- runCode should be(200)
- runRes shouldBe Some(JsArray(JsString("a"), JsString("b")))
- }
- }
-
- it should "support array as input param" in {
- val (out, err) = withActionContainer() { c =>
- val (initCode, _) =
- c.init(
- initPayload(
- functionb64,
-
"Apache.OpenWhisk.Tests.Dotnet::Apache.OpenWhisk.Tests.Dotnet.HelloPassArrayParam::Main"))
- initCode should be(200)
-
- val (runCode, runRes) =
c.runForJsArray(runPayload(JsArray(JsString("a"), JsString("b"))))
- runCode should be(200)
- runRes shouldBe Some(JsArray(JsString("a"), JsString("b")))
- }
- }
-}
diff --git
a/tests/src/test/scala/actionContainers/DotNet3_1ActionContainerTests_2_2.scalaZ
b/tests/src/test/scala/actionContainers/DotNet3_1ActionContainerTests_2_2.scalaZ
deleted file mode 100644
index b3c9a99..0000000
---
a/tests/src/test/scala/actionContainers/DotNet3_1ActionContainerTests_2_2.scalaZ
+++ /dev/null
@@ -1,266 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements. See the NOTICE file distributed with
- * this work for additional information regarding copyright ownership.
- * The ASF licenses this file to You 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 actionContainers
-
-import org.junit.runner.RunWith
-import org.scalatest.junit.JUnitRunner
-import common.WskActorSystem
-import spray.json._
-import actionContainers.ActionContainer.withContainer
-import java.nio.file.Paths
-
-@RunWith(classOf[JUnitRunner])
-class DotNet3_1ActionContainerTests_2_2 extends BasicActionRunnerTests with
WskActorSystem {
- val functionb64 =
ResourceHelpers.readAsBase64(Paths.get(getClass.getResource("/dotnettests2.2.zip").getPath))
-
- // Helpers specific to java actions
- override def withActionContainer(env: Map[String, String] = Map.empty)(
- code: ActionContainer => Unit): (String, String) =
withContainer("action-dotnet-v3.1", env)(code)
-
- behavior of "dotnet action"
-
- override val testNoSourceOrExec = {
- TestConfig("")
- }
-
- override val testNotReturningJson = {
- // skip this test since and add own below (see Nuller)
- TestConfig("", skipTest = true)
- }
-
- override val testEnv = {
- TestConfig(functionb64, main =
"Apache.OpenWhisk.Tests.Dotnet::Apache.OpenWhisk.Tests.Dotnet.Environment::Main")
- }
-
- override val testEcho = {
- TestConfig(functionb64, main =
"Apache.OpenWhisk.Tests.Dotnet::Apache.OpenWhisk.Tests.Dotnet.AltEcho::Main")
- }
-
- override val testEnvParameters = {
- TestConfig(functionb64, main =
"Apache.OpenWhisk.Tests.Dotnet::Apache.OpenWhisk.Tests.Dotnet.Init::Main")
- }
-
- val testEchoNoWrite = {
- TestConfig(functionb64, main =
"Apache.OpenWhisk.Tests.Dotnet::Apache.OpenWhisk.Tests.Dotnet.Echo::MainAsync")
- }
-
- override val testUnicode = {
- TestConfig(functionb64, main =
"Apache.OpenWhisk.Tests.Dotnet::Apache.OpenWhisk.Tests.Dotnet.Unicode::Main")
- }
-
- override val testInitCannotBeCalledMoreThanOnce = testEchoNoWrite
-
- override val testEntryPointOtherThanMain = testEchoNoWrite
-
- override val testLargeInput = testEchoNoWrite
-
- it should "fail to initialize with bad archive" in {
- val (out, err) = withActionContainer() { c =>
- val brokenArchive = ("NOTAVALIDZIPFILE")
-
- val (initCode, initRes) =
- c.init(initPayload(brokenArchive,
"Apache.OpenWhisk.Tests.Dotnet::Apache.OpenWhisk.Tests.Dotnet.Invalid::Main"))
- initCode should not be (200)
-
- initRes shouldBe defined
-
- initRes should {
- be(Some(JsObject("error" -> JsString("Unable to decompress
package."))))
- }
- }
- }
-
- it should "return some error on action error" in {
- val (out, err) = withActionContainer() { c =>
- val (initCode, _) =
- c.init(initPayload(functionb64,
"Apache.OpenWhisk.Tests.Dotnet::Apache.OpenWhisk.Tests.Dotnet.Exception::Main"))
- initCode should be(200)
-
- val (runCode, runRes) = c.run(runPayload(JsObject.empty))
- runCode should not be (200)
-
- runRes shouldBe defined
- runRes.get.fields.get("error") shouldBe defined
- }
-
- checkStreams(out, err, {
- case (o, e) =>
- (o + e).toLowerCase should include("exception")
- })
- }
-
- it should "support a large payload" in {
- val (out, err) = withActionContainer() { c =>
- val payload = functionb64 + (" " * 18000000)
- val (initCode, _) =
- c.init(initPayload(payload,
"Apache.OpenWhisk.Tests.Dotnet::Apache.OpenWhisk.Tests.Dotnet.Error::Main"))
- initCode should be(200)
- }
- }
-
- it should "support application errors" in {
- val (out, err) = withActionContainer() { c =>
- val (initCode, _) =
- c.init(initPayload(functionb64,
"Apache.OpenWhisk.Tests.Dotnet::Apache.OpenWhisk.Tests.Dotnet.Error::Main"))
- initCode should be(200)
-
- val (runCode, runRes) = c.run(runPayload(JsObject.empty))
- runCode should be(200)
-
- runRes shouldBe defined
-
- runRes should {
- be(Some(JsObject("error" -> JsString(".NETCoreApp,Version=v3.1"))))
- }
- }
-
- checkStreams(out, err, {
- case (o, e) =>
- o shouldBe empty
- e shouldBe empty
- })
- }
-
- it should "fails on invalid assembly reference" in {
- val (out, err) = withActionContainer() { c =>
- val (initCode, initRes) = c.init(
- initPayload(functionb64,
"Apache.OpenWhisk.Tests.Dotnet.DoesntExist::Apache.OpenWhisk.Tests.Dotnet.Echo::Main"))
- initCode should be(502)
-
- initRes shouldBe defined
-
- initRes should {
- be(
- Some(JsObject("error" -> JsString(
- "Unable to locate requested assembly
(\"Apache.OpenWhisk.Tests.Dotnet.DoesntExist.dll\")."))))
- }
- }
- }
-
- it should "fails on invalid type reference" in {
- val (out, err) = withActionContainer() { c =>
- val (initCode, initRes) =
- c.init(initPayload(functionb64,
"Apache.OpenWhisk.Tests.Dotnet::Apache.OpenWhisk.Tests.Dotnet.FakeType::Main"))
- initCode should be(502)
-
- initRes should {
- be(
- Some(JsObject(
- "error" -> JsString("Unable to locate requested type
(\"Apache.OpenWhisk.Tests.Dotnet.FakeType\")."))))
- }
- }
- }
-
- it should "fails on invalid method reference" in {
- val (out, err) = withActionContainer() { c =>
- val (initCode, initRes) = c.init(
- initPayload(functionb64,
"Apache.OpenWhisk.Tests.Dotnet::Apache.OpenWhisk.Tests.Dotnet.Echo::FakeMethod"))
- initCode should be(502)
-
- initRes should {
- be(Some(JsObject("error" -> JsString("Unable to locate requested
method (\"FakeMethod\")."))))
- }
- }
- }
-
- it should "fails on type with no empty constructor" in {
- val (out, err) = withActionContainer() { c =>
- val (initCode, initRes) = c.init(
- initPayload(
- functionb64,
-
"Apache.OpenWhisk.Tests.Dotnet::Apache.OpenWhisk.Tests.Dotnet.NonEmptyConstructor::Main"))
- initCode should be(502)
-
- initRes should {
- be(
- Some(JsObject("error" -> JsString(
- "Unable to locate appropriate constructor for
(\"Apache.OpenWhisk.Tests.Dotnet.NonEmptyConstructor\")."))))
- }
- }
- }
-
- it should "validate main string format 1" in {
- val (out, err) = withActionContainer() { c =>
- val (initCode, initRes) = c.init(initPayload(functionb64,
"Apache.OpenWhisk.Tests.Dotnet"))
- initCode should not be (200)
-
- initRes should {
- be(Some(JsObject("error" -> JsString("main required format is
\"Assembly::Type::Function\"."))))
- }
- }
- }
-
- it should "validate main string format 2" in {
- val (out, err) = withActionContainer() { c =>
- val (initCode, initRes) =
- c.init(initPayload(functionb64,
"Apache.OpenWhisk.Tests.Dotnet::Apache.OpenWhisk.Tests.Dotnet.Echo"))
- initCode should not be (200)
-
- initRes should {
- be(Some(JsObject("error" -> JsString("main required format is
\"Assembly::Type::Function\"."))))
- }
- }
- }
-
- it should "enforce that the user returns an object" in {
- val (out, err) = withActionContainer() { c =>
- val (initCode, _) =
- c.init(initPayload(functionb64,
"Apache.OpenWhisk.Tests.Dotnet::Apache.OpenWhisk.Tests.Dotnet.Nuller::Main"))
- initCode should be(200)
-
- val (runCode, runRes) = c.run(runPayload(JsObject.empty))
- runCode should not be (200)
-
- runRes shouldBe defined
- runRes.get.fields.get("error") shouldBe defined
- }
-
- checkStreams(out, err, {
- case (o, e) =>
- (o + e).toLowerCase should include("the action returned null")
- })
- }
-
- it should "support return array result" in {
- val (out, err) = withActionContainer() { c =>
- val (initCode, _) =
- c.init(
- initPayload(functionb64,
"Apache.OpenWhisk.Tests.Dotnet::Apache.OpenWhisk.Tests.Dotnet.HelloArray::Main"))
- initCode should be(200)
-
- val (runCode, runRes) = c.runForJsArray(runPayload(JsObject()))
- runCode should be(200)
- runRes shouldBe Some(JsArray(JsString("a"), JsString("b")))
- }
- }
-
- it should "support array as input param" in {
- val (out, err) = withActionContainer() { c =>
- val (initCode, _) =
- c.init(
- initPayload(
- functionb64,
-
"Apache.OpenWhisk.Tests.Dotnet::Apache.OpenWhisk.Tests.Dotnet.HelloPassArrayParam::Main"))
- initCode should be(200)
-
- val (runCode, runRes) =
c.runForJsArray(runPayload(JsArray(JsString("a"), JsString("b"))))
- runCode should be(200)
- runRes shouldBe Some(JsArray(JsString("a"), JsString("b")))
- }
- }
-}
diff --git a/tools/vagrant/README.md b/tools/vagrant/README.md
index 45ce1e1..d2b0612 100644
--- a/tools/vagrant/README.md
+++ b/tools/vagrant/README.md
@@ -46,7 +46,6 @@ cd $OPENWHISK_HOME
./gradlew install
cd ..
cd openwhisk-runtime-dotnet
-./gradlew core:dotnet3.1:distDocker
./gradlew core:net6.0:distDocker
./gradlew :tests:test
```