diff --git a/.github/workflows/cicd.yml b/.github/workflows/cicd.yml index 546c0431..1dab9d3f 100644 --- a/.github/workflows/cicd.yml +++ b/.github/workflows/cicd.yml @@ -33,3 +33,12 @@ jobs: build-types: "[ 'Debug' ]" test: true preset-name: 'cicd' + + dotnet-tests: + name: .NET Tests + permissions: + contents: read + concurrency: + group: ${{ github.workflow }}-dotnet-${{ github.event.pull_request.number || github.ref }} + cancel-in-progress: true + uses: ./.github/workflows/dotnet-tests.yml diff --git a/.github/workflows/dotnet-tests.yml b/.github/workflows/dotnet-tests.yml new file mode 100644 index 00000000..69ec1dd5 --- /dev/null +++ b/.github/workflows/dotnet-tests.yml @@ -0,0 +1,97 @@ +name: '.NET Tests 🧪' + +on: + workflow_dispatch: + workflow_call: + push: + branches: + - develop + - main + paths: + - 'api/dotnet/**' + - 'api/protos/**' + - 'tests/integration/dotnet/**' + - '.github/workflows/dotnet-tests.yml' + pull_request: + branches: + - develop + - main + paths: + - 'api/dotnet/**' + - 'api/protos/**' + - 'tests/integration/dotnet/**' + - '.github/workflows/dotnet-tests.yml' + +jobs: + dotnet-build: + name: Build .NET API Bindings + runs-on: ubuntu-latest + steps: + - name: Checkout repository + uses: actions/checkout@v4 + + - name: Setup .NET + uses: actions/setup-dotnet@v4 + with: + dotnet-version: '8.0.x' + + - name: Restore dependencies + run: dotnet restore api/dotnet/NetRemoteClient.csproj + + - name: Build + run: dotnet build api/dotnet/NetRemoteClient.csproj --configuration Release --no-restore + + - name: Pack NuGet package + run: dotnet pack api/dotnet/NetRemoteClient.csproj --configuration Release --no-build --output ./artifacts + + - name: Upload NuGet package artifact + uses: actions/upload-artifact@v4 + with: + name: nuget-package + path: ./artifacts/*.nupkg + retention-days: 7 + + dotnet-integration-tests: + name: .NET Integration Tests + runs-on: ubuntu-latest + needs: dotnet-build + steps: + - name: Checkout repository + uses: actions/checkout@v4 + + - name: Setup .NET + uses: actions/setup-dotnet@v4 + with: + dotnet-version: '8.0.x' + + - name: Restore dependencies + run: dotnet restore tests/integration/dotnet/NetRemoteClient.IntegrationTests.csproj + + - name: Build + run: dotnet build tests/integration/dotnet/NetRemoteClient.IntegrationTests.csproj --configuration Release --no-restore + + - name: Run integration tests + run: dotnet test tests/integration/dotnet/NetRemoteClient.IntegrationTests.csproj --configuration Release --no-build --verbosity normal --logger "trx;LogFileName=test-results.trx" + + - name: Upload test results + uses: actions/upload-artifact@v4 + if: always() + with: + name: dotnet-test-results + path: tests/integration/dotnet/TestResults/*.trx + retention-days: 7 + + dotnet-tests-windows: + name: .NET Tests (Windows) + runs-on: windows-latest + steps: + - name: Checkout repository + uses: actions/checkout@v4 + + - name: Setup .NET + uses: actions/setup-dotnet@v4 + with: + dotnet-version: '8.0.x' + + - name: Build and test + run: dotnet test tests/integration/dotnet/NetRemoteClient.IntegrationTests.csproj --configuration Release --verbosity normal diff --git a/api/CMakeLists.txt b/api/CMakeLists.txt index 543bf2b1..b7e504c6 100644 --- a/api/CMakeLists.txt +++ b/api/CMakeLists.txt @@ -26,3 +26,6 @@ install( if (NOT NETREMOTE_EXCLUDE_API_BINDINGS) add_subdirectory(protocol) endif() + +# .NET API bindings (NuGet package) +add_subdirectory(dotnet) diff --git a/api/dotnet/.gitignore b/api/dotnet/.gitignore new file mode 100644 index 00000000..bcfe10ee --- /dev/null +++ b/api/dotnet/.gitignore @@ -0,0 +1,7 @@ +# Build outputs +bin/ +obj/ + +# IDE +.vs/ +*.user diff --git a/api/dotnet/CMakeLists.txt b/api/dotnet/CMakeLists.txt new file mode 100644 index 00000000..aece5d59 --- /dev/null +++ b/api/dotnet/CMakeLists.txt @@ -0,0 +1,65 @@ +# CMake integration for NuGet package building +# This file provides targets for building and packing the NetRemote client NuGet package + +find_program(DOTNET_EXECUTABLE dotnet) + +if(NOT DOTNET_EXECUTABLE) + message(WARNING "dotnet CLI not found. NuGet package targets will not be available.") + return() +endif() + +set(NUGET_PROJECT_FILE "${CMAKE_CURRENT_SOURCE_DIR}/NetRemoteClient.csproj") +set(NUGET_OUTPUT_DIR "${CMAKE_SOURCE_DIR}/out/nuget") + +# Update the version in the .csproj file based on the project version +set(NUGET_VERSION "${VERSION_MAJOR}.${VERSION_MINOR}.${VERSION_PATCH}") + +# Custom target to restore NuGet package dependencies +add_custom_target(nuget-restore + COMMAND ${DOTNET_EXECUTABLE} restore "${NUGET_PROJECT_FILE}" + WORKING_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR} + COMMENT "Restoring NuGet package dependencies..." + VERBATIM +) + +# Custom target to build the NuGet package project +add_custom_target(nuget-build + COMMAND ${DOTNET_EXECUTABLE} build "${NUGET_PROJECT_FILE}" -c Release + WORKING_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR} + DEPENDS nuget-restore + COMMENT "Building NetRemote client library..." + VERBATIM +) + +# Custom target to create the NuGet package +add_custom_target(nuget-pack + COMMAND ${DOTNET_EXECUTABLE} pack "${NUGET_PROJECT_FILE}" + -c Release + -o "${NUGET_OUTPUT_DIR}" + -p:Version=${NUGET_VERSION} + --no-build + WORKING_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR} + DEPENDS nuget-build + COMMENT "Creating NuGet package Microsoft.Net.Remote.Client ${NUGET_VERSION}..." + VERBATIM +) + +# Custom target to clean NuGet build artifacts +add_custom_target(nuget-clean + COMMAND ${DOTNET_EXECUTABLE} clean "${NUGET_PROJECT_FILE}" -c Release + COMMAND ${CMAKE_COMMAND} -E rm -rf "${CMAKE_CURRENT_SOURCE_DIR}/bin" + COMMAND ${CMAKE_COMMAND} -E rm -rf "${CMAKE_CURRENT_SOURCE_DIR}/obj" + WORKING_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR} + COMMENT "Cleaning NuGet build artifacts..." + VERBATIM +) + +# Add a convenience target that does everything +add_custom_target(nuget ALL + DEPENDS nuget-pack + COMMENT "NuGet package build complete" +) + +message(STATUS "NuGet packaging enabled. Use 'cmake --build . --target nuget-pack' to create the package.") +message(STATUS "NuGet package version: ${NUGET_VERSION}") +message(STATUS "NuGet output directory: ${NUGET_OUTPUT_DIR}") diff --git a/api/dotnet/NetRemoteClient.csproj b/api/dotnet/NetRemoteClient.csproj new file mode 100644 index 00000000..baf01b13 --- /dev/null +++ b/api/dotnet/NetRemoteClient.csproj @@ -0,0 +1,100 @@ + + + + netstandard2.1 + latest + + + Microsoft.Net.Remote.Client + 0.5.2 + Microsoft + Microsoft + NetRemote + NetRemote client library providing gRPC service bindings and protobuf definitions for remote network management operations. + netremote;grpc;protobuf;network;wifi;remote + https://github.com/microsoft/netremote + https://github.com/microsoft/netremote + git + MIT + README.md + Copyright (c) Microsoft Corporation. All rights reserved. + + + false + true + snupkg + true + + + $(MSBuildThisFileDirectory)../../out/nuget + + + + + + + all + runtime; build; native; contentfiles; analyzers; buildtransitive + + + + + + + Protos/NetworkCore.proto + + + Protos/Network8021x.proto + + + Protos/WifiCore.proto + + + Protos/NetRemoteDataStream.proto + + + Protos/NetRemoteDataStreamingService.proto + + + Protos/NetRemoteNetwork.proto + + + Protos/NetRemoteRfAttenuator.proto + + + Protos/NetRemoteRfAttenuatorService.proto + + + Protos/NetRemoteService.proto + + + Protos/NetRemoteWifi.proto + + + + + + + + + + diff --git a/api/dotnet/README.md b/api/dotnet/README.md new file mode 100644 index 00000000..77471a1d --- /dev/null +++ b/api/dotnet/README.md @@ -0,0 +1,73 @@ +# Microsoft.Net.Remote.Client + +A .NET client library for NetRemote, providing gRPC service bindings and Protocol Buffer definitions for remote network management operations. + +## Overview + +This package provides: + +- **gRPC Client Stubs**: Pre-generated client stubs for all NetRemote services +- **Protocol Buffer Definitions**: Message types for network, Wi-Fi, and RF attenuator operations +- **Proto Files**: Raw `.proto` files included for use with other languages or custom code generation + +## Installation + +```bash +dotnet add package Microsoft.Net.Remote.Client +``` + +## Quick Start + +```csharp +using Grpc.Net.Client; +using Microsoft.Net.Remote.Service; + +// Create a channel to the NetRemote server +using var channel = GrpcChannel.ForAddress("http://localhost:5047"); + +// Create the client +var client = new NetRemote.NetRemoteClient(channel); + +// Enumerate network interfaces +var response = await client.NetworkInterfacesEnumerateAsync( + new Microsoft.Net.Remote.Network.NetworkEnumerateInterfacesRequest()); + +foreach (var iface in response.Interfaces) +{ + Console.WriteLine($"Interface: {iface.Id} ({iface.Kind})"); +} +``` + +## Services + +The package includes clients for the following services: + +### NetRemote Service +Core network management operations including: +- Network interface enumeration +- Wi-Fi access point management (enable/disable, configuration) +- Wi-Fi authentication settings (including 802.1X) + +### NetRemote Data Streaming Service +Real-time data streaming capabilities for network monitoring and diagnostics. + +### NetRemote RF Attenuator Service +RF attenuator control for wireless testing scenarios. + +## Proto Files + +The raw `.proto` files are included in the package under the `Protos` content folder. These can be used to generate bindings for other languages or for custom code generation scenarios. + +## Requirements + +- .NET Core 3.0+ / .NET 5+ / .NET Standard 2.1 compatible runtime +- A running NetRemote server instance + +## License + +This project is licensed under the MIT License - see the [LICENSE](https://github.com/microsoft/netremote/blob/develop/LICENSE) file for details. + +## Links + +- [GitHub Repository](https://github.com/microsoft/netremote) +- [Documentation](https://github.com/microsoft/netremote#readme) diff --git a/api/dotnet/build.ps1 b/api/dotnet/build.ps1 new file mode 100644 index 00000000..59927024 --- /dev/null +++ b/api/dotnet/build.ps1 @@ -0,0 +1,141 @@ +<# +.SYNOPSIS + Build script for NetRemote NuGet package (Windows) + +.DESCRIPTION + This script builds and packs the Microsoft.Net.Remote.Client NuGet package + +.PARAMETER Configuration + Build configuration (Debug or Release). Default: Release + +.PARAMETER Version + Package version (e.g., 1.0.0). If not specified, determined from git tag or defaults to 0.5.2 + +.PARAMETER OutputDir + Output directory for the NuGet package + +.PARAMETER SkipRestore + Skip package restore + +.PARAMETER SkipBuild + Skip build (pack only) + +.PARAMETER Clean + Clean build artifacts before building + +.EXAMPLE + .\build.ps1 -Configuration Release -Version 1.0.0 + +.EXAMPLE + .\build.ps1 -Clean +#> + +param( + [ValidateSet("Debug", "Release")] + [string]$Configuration = "Release", + + [string]$Version = "", + + [string]$OutputDir = "", + + [switch]$SkipRestore, + + [switch]$SkipBuild, + + [switch]$Clean +) + +$ErrorActionPreference = "Stop" + +$ScriptDir = Split-Path -Parent $MyInvocation.MyCommand.Path +$ProjectRoot = (Get-Item "$ScriptDir\..\..").FullName + +if ([string]::IsNullOrEmpty($OutputDir)) { + $OutputDir = Join-Path $ProjectRoot "out\nuget" +} + +# Check for dotnet CLI +$dotnetCmd = Get-Command dotnet -ErrorAction SilentlyContinue +if (-not $dotnetCmd) { + Write-Error "dotnet CLI not found. Please install .NET SDK from https://dotnet.microsoft.com/download" + exit 1 +} + +Write-Host "=== NetRemote NuGet Package Build ===" -ForegroundColor Cyan +Write-Host "Configuration: $Configuration" +Write-Host "Output: $OutputDir" + +# Determine version if not specified +if ([string]::IsNullOrEmpty($Version)) { + # Try to get version from git tag + $gitCmd = Get-Command git -ErrorAction SilentlyContinue + if ($gitCmd -and (Test-Path (Join-Path $ProjectRoot ".git"))) { + $latestTag = git -C $ProjectRoot tag -l --sort=-v:refname | Select-Object -First 1 + if ($latestTag -match '^v(\d+)\.(\d+)\.(\d+)') { + $Version = "$($Matches[1]).$($Matches[2]).$($Matches[3])" + } + } + + # Fallback to default version + if ([string]::IsNullOrEmpty($Version)) { + $Version = "0.5.2" + } +} + +Write-Host "Version: $Version" + +Push-Location $ScriptDir + +try { + # Clean if requested + if ($Clean) { + Write-Host "" + Write-Host "Cleaning build artifacts..." -ForegroundColor Yellow + dotnet clean NetRemoteClient.csproj -c $Configuration 2>$null + if (Test-Path "bin") { Remove-Item -Recurse -Force "bin" } + if (Test-Path "obj") { Remove-Item -Recurse -Force "obj" } + } + + # Restore packages + if (-not $SkipRestore) { + Write-Host "" + Write-Host "Restoring packages..." -ForegroundColor Yellow + dotnet restore NetRemoteClient.csproj + if ($LASTEXITCODE -ne 0) { throw "Restore failed" } + } + + # Build + if (-not $SkipBuild) { + Write-Host "" + Write-Host "Building..." -ForegroundColor Yellow + dotnet build NetRemoteClient.csproj -c $Configuration --no-restore + if ($LASTEXITCODE -ne 0) { throw "Build failed" } + } + + # Create output directory + if (-not (Test-Path $OutputDir)) { + New-Item -ItemType Directory -Path $OutputDir -Force | Out-Null + } + + # Pack + Write-Host "" + Write-Host "Creating NuGet package..." -ForegroundColor Yellow + dotnet pack NetRemoteClient.csproj ` + -c $Configuration ` + -o $OutputDir ` + -p:Version=$Version ` + --no-build + + if ($LASTEXITCODE -ne 0) { throw "Pack failed" } + + Write-Host "" + Write-Host "=== Build Complete ===" -ForegroundColor Green + Write-Host "NuGet package created at: $OutputDir" + + Get-ChildItem -Path $OutputDir -Filter "*.nupkg" | ForEach-Object { + Write-Host " - $($_.Name)" -ForegroundColor Cyan + } +} +finally { + Pop-Location +} diff --git a/api/dotnet/build.sh b/api/dotnet/build.sh new file mode 100755 index 00000000..15ea41b6 --- /dev/null +++ b/api/dotnet/build.sh @@ -0,0 +1,133 @@ +#!/bin/bash +# Build script for NetRemote NuGet package (Linux/macOS) +# This script builds and packs the Microsoft.Net.Remote.Client NuGet package + +set -e + +SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)" +PROJECT_ROOT="$(cd "$SCRIPT_DIR/../.." && pwd)" +OUTPUT_DIR="${PROJECT_ROOT}/out/nuget" + +# Default values +CONFIGURATION="Release" +VERSION="" +SKIP_RESTORE=false +SKIP_BUILD=false +CLEAN=false + +# Parse command line arguments +while [[ $# -gt 0 ]]; do + case $1 in + -c|--configuration) + CONFIGURATION="$2" + shift 2 + ;; + -v|--version) + VERSION="$2" + shift 2 + ;; + -o|--output) + OUTPUT_DIR="$2" + shift 2 + ;; + --skip-restore) + SKIP_RESTORE=true + shift + ;; + --skip-build) + SKIP_BUILD=true + shift + ;; + --clean) + CLEAN=true + shift + ;; + -h|--help) + echo "Usage: $0 [options]" + echo "" + echo "Options:" + echo " -c, --configuration Build configuration (Debug|Release). Default: Release" + echo " -v, --version Package version (e.g., 1.0.0). Default: from git tag or 0.5.2" + echo " -o, --output Output directory for the NuGet package" + echo " --skip-restore Skip package restore" + echo " --skip-build Skip build (pack only)" + echo " --clean Clean build artifacts before building" + echo " -h, --help Show this help message" + exit 0 + ;; + *) + echo "Unknown option: $1" + exit 1 + ;; + esac +done + +# Check for dotnet CLI +if ! command -v dotnet &> /dev/null; then + echo "Error: dotnet CLI not found. Please install .NET SDK." + echo "Visit: https://dotnet.microsoft.com/download" + exit 1 +fi + +echo "=== NetRemote NuGet Package Build ===" +echo "Configuration: $CONFIGURATION" +echo "Output: $OUTPUT_DIR" + +# Determine version if not specified +if [ -z "$VERSION" ]; then + # Try to get version from git tag + if command -v git &> /dev/null && [ -d "$PROJECT_ROOT/.git" ]; then + LATEST_TAG=$(git -C "$PROJECT_ROOT" tag -l --sort=-v:refname | head -n1) + if [[ "$LATEST_TAG" =~ ^v([0-9]+)\.([0-9]+)\.([0-9]+) ]]; then + VERSION="${BASH_REMATCH[1]}.${BASH_REMATCH[2]}.${BASH_REMATCH[3]}" + fi + fi + + # Fallback to default version + if [ -z "$VERSION" ]; then + VERSION="0.5.2" + fi +fi + +echo "Version: $VERSION" + +cd "$SCRIPT_DIR" + +# Clean if requested +if [ "$CLEAN" = true ]; then + echo "" + echo "Cleaning build artifacts..." + dotnet clean NetRemoteClient.csproj -c "$CONFIGURATION" || true + rm -rf bin obj +fi + +# Restore packages +if [ "$SKIP_RESTORE" = false ]; then + echo "" + echo "Restoring packages..." + dotnet restore NetRemoteClient.csproj +fi + +# Build +if [ "$SKIP_BUILD" = false ]; then + echo "" + echo "Building..." + dotnet build NetRemoteClient.csproj -c "$CONFIGURATION" --no-restore +fi + +# Create output directory +mkdir -p "$OUTPUT_DIR" + +# Pack +echo "" +echo "Creating NuGet package..." +dotnet pack NetRemoteClient.csproj \ + -c "$CONFIGURATION" \ + -o "$OUTPUT_DIR" \ + -p:Version="$VERSION" \ + --no-build + +echo "" +echo "=== Build Complete ===" +echo "NuGet package created at: $OUTPUT_DIR" +ls -la "$OUTPUT_DIR"/*.nupkg 2>/dev/null || echo "No .nupkg files found" diff --git a/src/common/dotnet/CMakeLists.txt b/src/common/dotnet/CMakeLists.txt deleted file mode 100644 index 3ca90d6c..00000000 --- a/src/common/dotnet/CMakeLists.txt +++ /dev/null @@ -1,4 +0,0 @@ - -include_external_msproject(${PROJECT_NAME}-dotnet - ${CMAKE_CURRENT_LIST_DIR}/NetRemote.sln -) diff --git a/src/common/dotnet/NetRemote.sln b/src/common/dotnet/NetRemote.sln deleted file mode 100644 index 50960c12..00000000 --- a/src/common/dotnet/NetRemote.sln +++ /dev/null @@ -1,93 +0,0 @@ - -Microsoft Visual Studio Solution File, Format Version 12.00 -# Visual Studio Version 17 -VisualStudioVersion = 17.0.31903.59 -MinimumVisualStudioVersion = 10.0.40219.1 -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "NetRemoteService", "NetRemoteService\NetRemoteService.csproj", "{D56170AB-FFA2-435C-8B46-C1517D0873A3}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "NetRemoteClient", "NetRemoteClient\NetRemoteClient.csproj", "{E4BB11EC-6CE2-4CE9-8806-EA9CF46DE658}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "NetRemoteClientUnitTest", "NetRemoteClientUnitTest\NetRemoteClientUnitTest.csproj", "{452E5C5E-B769-43FE-AB74-5BD92D6E5BC9}" -EndProject -Global - GlobalSection(SolutionConfigurationPlatforms) = preSolution - Debug|Any CPU = Debug|Any CPU - Debug|ARM32 = Debug|ARM32 - Debug|ARM64 = Debug|ARM64 - Debug|x64 = Debug|x64 - Debug|x86 = Debug|x86 - Release|Any CPU = Release|Any CPU - Release|ARM32 = Release|ARM32 - Release|ARM64 = Release|ARM64 - Release|x64 = Release|x64 - Release|x86 = Release|x86 - EndGlobalSection - GlobalSection(ProjectConfigurationPlatforms) = postSolution - {D56170AB-FFA2-435C-8B46-C1517D0873A3}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {D56170AB-FFA2-435C-8B46-C1517D0873A3}.Debug|Any CPU.Build.0 = Debug|Any CPU - {D56170AB-FFA2-435C-8B46-C1517D0873A3}.Debug|ARM32.ActiveCfg = Debug|ARM32 - {D56170AB-FFA2-435C-8B46-C1517D0873A3}.Debug|ARM32.Build.0 = Debug|ARM32 - {D56170AB-FFA2-435C-8B46-C1517D0873A3}.Debug|ARM64.ActiveCfg = Debug|ARM64 - {D56170AB-FFA2-435C-8B46-C1517D0873A3}.Debug|ARM64.Build.0 = Debug|ARM64 - {D56170AB-FFA2-435C-8B46-C1517D0873A3}.Debug|x64.ActiveCfg = Debug|x64 - {D56170AB-FFA2-435C-8B46-C1517D0873A3}.Debug|x64.Build.0 = Debug|x64 - {D56170AB-FFA2-435C-8B46-C1517D0873A3}.Debug|x86.ActiveCfg = Debug|x86 - {D56170AB-FFA2-435C-8B46-C1517D0873A3}.Debug|x86.Build.0 = Debug|x86 - {D56170AB-FFA2-435C-8B46-C1517D0873A3}.Release|Any CPU.ActiveCfg = Release|Any CPU - {D56170AB-FFA2-435C-8B46-C1517D0873A3}.Release|Any CPU.Build.0 = Release|Any CPU - {D56170AB-FFA2-435C-8B46-C1517D0873A3}.Release|ARM32.ActiveCfg = Release|ARM32 - {D56170AB-FFA2-435C-8B46-C1517D0873A3}.Release|ARM32.Build.0 = Release|ARM32 - {D56170AB-FFA2-435C-8B46-C1517D0873A3}.Release|ARM64.ActiveCfg = Release|ARM64 - {D56170AB-FFA2-435C-8B46-C1517D0873A3}.Release|ARM64.Build.0 = Release|ARM64 - {D56170AB-FFA2-435C-8B46-C1517D0873A3}.Release|x64.ActiveCfg = Release|Any CPU - {D56170AB-FFA2-435C-8B46-C1517D0873A3}.Release|x64.Build.0 = Release|Any CPU - {D56170AB-FFA2-435C-8B46-C1517D0873A3}.Release|x86.ActiveCfg = Release|x86 - {D56170AB-FFA2-435C-8B46-C1517D0873A3}.Release|x86.Build.0 = Release|x86 - {E4BB11EC-6CE2-4CE9-8806-EA9CF46DE658}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {E4BB11EC-6CE2-4CE9-8806-EA9CF46DE658}.Debug|Any CPU.Build.0 = Debug|Any CPU - {E4BB11EC-6CE2-4CE9-8806-EA9CF46DE658}.Debug|ARM32.ActiveCfg = Debug|ARM32 - {E4BB11EC-6CE2-4CE9-8806-EA9CF46DE658}.Debug|ARM32.Build.0 = Debug|ARM32 - {E4BB11EC-6CE2-4CE9-8806-EA9CF46DE658}.Debug|ARM64.ActiveCfg = Debug|ARM64 - {E4BB11EC-6CE2-4CE9-8806-EA9CF46DE658}.Debug|ARM64.Build.0 = Debug|ARM64 - {E4BB11EC-6CE2-4CE9-8806-EA9CF46DE658}.Debug|x64.ActiveCfg = Debug|x64 - {E4BB11EC-6CE2-4CE9-8806-EA9CF46DE658}.Debug|x64.Build.0 = Debug|x64 - {E4BB11EC-6CE2-4CE9-8806-EA9CF46DE658}.Debug|x86.ActiveCfg = Debug|x86 - {E4BB11EC-6CE2-4CE9-8806-EA9CF46DE658}.Debug|x86.Build.0 = Debug|x86 - {E4BB11EC-6CE2-4CE9-8806-EA9CF46DE658}.Release|Any CPU.ActiveCfg = Release|Any CPU - {E4BB11EC-6CE2-4CE9-8806-EA9CF46DE658}.Release|Any CPU.Build.0 = Release|Any CPU - {E4BB11EC-6CE2-4CE9-8806-EA9CF46DE658}.Release|ARM32.ActiveCfg = Release|ARM32 - {E4BB11EC-6CE2-4CE9-8806-EA9CF46DE658}.Release|ARM32.Build.0 = Release|ARM32 - {E4BB11EC-6CE2-4CE9-8806-EA9CF46DE658}.Release|ARM64.ActiveCfg = Release|ARM64 - {E4BB11EC-6CE2-4CE9-8806-EA9CF46DE658}.Release|ARM64.Build.0 = Release|ARM64 - {E4BB11EC-6CE2-4CE9-8806-EA9CF46DE658}.Release|x64.ActiveCfg = Release|x64 - {E4BB11EC-6CE2-4CE9-8806-EA9CF46DE658}.Release|x64.Build.0 = Release|x64 - {E4BB11EC-6CE2-4CE9-8806-EA9CF46DE658}.Release|x86.ActiveCfg = Release|x86 - {E4BB11EC-6CE2-4CE9-8806-EA9CF46DE658}.Release|x86.Build.0 = Release|x86 - {452E5C5E-B769-43FE-AB74-5BD92D6E5BC9}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {452E5C5E-B769-43FE-AB74-5BD92D6E5BC9}.Debug|Any CPU.Build.0 = Debug|Any CPU - {452E5C5E-B769-43FE-AB74-5BD92D6E5BC9}.Debug|ARM32.ActiveCfg = Debug|ARM32 - {452E5C5E-B769-43FE-AB74-5BD92D6E5BC9}.Debug|ARM32.Build.0 = Debug|ARM32 - {452E5C5E-B769-43FE-AB74-5BD92D6E5BC9}.Debug|ARM64.ActiveCfg = Debug|ARM64 - {452E5C5E-B769-43FE-AB74-5BD92D6E5BC9}.Debug|ARM64.Build.0 = Debug|ARM64 - {452E5C5E-B769-43FE-AB74-5BD92D6E5BC9}.Debug|x64.ActiveCfg = Debug|x64 - {452E5C5E-B769-43FE-AB74-5BD92D6E5BC9}.Debug|x64.Build.0 = Debug|x64 - {452E5C5E-B769-43FE-AB74-5BD92D6E5BC9}.Debug|x86.ActiveCfg = Debug|x86 - {452E5C5E-B769-43FE-AB74-5BD92D6E5BC9}.Debug|x86.Build.0 = Debug|x86 - {452E5C5E-B769-43FE-AB74-5BD92D6E5BC9}.Release|Any CPU.ActiveCfg = Release|Any CPU - {452E5C5E-B769-43FE-AB74-5BD92D6E5BC9}.Release|Any CPU.Build.0 = Release|Any CPU - {452E5C5E-B769-43FE-AB74-5BD92D6E5BC9}.Release|ARM32.ActiveCfg = Release|ARM32 - {452E5C5E-B769-43FE-AB74-5BD92D6E5BC9}.Release|ARM32.Build.0 = Release|ARM32 - {452E5C5E-B769-43FE-AB74-5BD92D6E5BC9}.Release|ARM64.ActiveCfg = Release|ARM64 - {452E5C5E-B769-43FE-AB74-5BD92D6E5BC9}.Release|ARM64.Build.0 = Release|ARM64 - {452E5C5E-B769-43FE-AB74-5BD92D6E5BC9}.Release|x64.ActiveCfg = Release|Any CPU - {452E5C5E-B769-43FE-AB74-5BD92D6E5BC9}.Release|x64.Build.0 = Release|Any CPU - {452E5C5E-B769-43FE-AB74-5BD92D6E5BC9}.Release|x86.ActiveCfg = Release|x86 - {452E5C5E-B769-43FE-AB74-5BD92D6E5BC9}.Release|x86.Build.0 = Release|x86 - EndGlobalSection - GlobalSection(SolutionProperties) = preSolution - HideSolutionNode = FALSE - EndGlobalSection - GlobalSection(ExtensibilityGlobals) = postSolution - SolutionGuid = {4F4EC49D-9867-45B8-9505-3F87F7773AAE} - EndGlobalSection -EndGlobal diff --git a/src/common/dotnet/NetRemoteClient/NetRemoteClient.cs b/src/common/dotnet/NetRemoteClient/NetRemoteClient.cs deleted file mode 100644 index a1e08d27..00000000 --- a/src/common/dotnet/NetRemoteClient/NetRemoteClient.cs +++ /dev/null @@ -1,8 +0,0 @@ - -namespace Microsoft.Net.Remote.Client -{ - public class NetRemoteClient - { - - } -} diff --git a/src/common/dotnet/NetRemoteClient/NetRemoteClient.csproj b/src/common/dotnet/NetRemoteClient/NetRemoteClient.csproj deleted file mode 100644 index 581d29ef..00000000 --- a/src/common/dotnet/NetRemoteClient/NetRemoteClient.csproj +++ /dev/null @@ -1,50 +0,0 @@ - - - - net7.0 - enable - enable - AnyCPU;x64;ARM64;ARM32;x86 - - - - - - - all - runtime; build; native; contentfiles; analyzers; buildtransitive - - - - - - - - - - Protos\NetRemoteDataStream.proto - - - Protos\NetRemoteDataStreamingService.proto - - - Protos\NetRemoteNetwork.proto - - - Protos\NetRemoteService.proto - - - Protos\NetRemoteWifi.proto - - - Protos\Network8021x.proto - - - Protos\NetworkCore.proto - - - Protos\WifiCore.proto - - - - diff --git a/src/common/dotnet/NetRemoteService/NetRemoteService.csproj b/src/common/dotnet/NetRemoteService/NetRemoteService.csproj deleted file mode 100644 index be6b1136..00000000 --- a/src/common/dotnet/NetRemoteService/NetRemoteService.csproj +++ /dev/null @@ -1,45 +0,0 @@ - - - - net7.0 - enable - enable - AnyCPU;x64;ARM64;ARM32;x86 - - - - - - - - - - - - - Protos\NetRemoteDataStream.proto - - - Protos\NetRemoteDataStreamingService.proto - - - Protos\NetRemoteNetwork.proto - - - Protos\NetRemoteService.proto - - - Protos\NetRemoteWifi.proto - - - Protos\Network8021x.proto - - - Protos\NetworkCore.proto - - - Protos\WifiCore.proto - - - - diff --git a/src/common/dotnet/NetRemoteService/NetRemoteService.csproj.user b/src/common/dotnet/NetRemoteService/NetRemoteService.csproj.user deleted file mode 100644 index 0c93fe21..00000000 --- a/src/common/dotnet/NetRemoteService/NetRemoteService.csproj.user +++ /dev/null @@ -1,9 +0,0 @@ - - - - http - - - ProjectDebugger - - \ No newline at end of file diff --git a/src/common/dotnet/NetRemoteService/Program.cs b/src/common/dotnet/NetRemoteService/Program.cs deleted file mode 100644 index 91c59a54..00000000 --- a/src/common/dotnet/NetRemoteService/Program.cs +++ /dev/null @@ -1,14 +0,0 @@ -using Microsoft.Net.Remote.Service; - -var builder = WebApplication.CreateBuilder(args); - -// Add services to the container. -builder.Services.AddGrpc(); - -var app = builder.Build(); - -// Configure the HTTP request pipeline. -app.MapGrpcService(); -app.MapGet("/", () => "Communication with gRPC endpoints must be made through a gRPC client. To learn how to create a client, visit: https://go.microsoft.com/fwlink/?linkid=2086909"); - -app.Run(); diff --git a/src/common/dotnet/NetRemoteService/Properties/launchSettings.json b/src/common/dotnet/NetRemoteService/Properties/launchSettings.json deleted file mode 100644 index 4a9f9107..00000000 --- a/src/common/dotnet/NetRemoteService/Properties/launchSettings.json +++ /dev/null @@ -1,22 +0,0 @@ -{ - "profiles": { - "http": { - "commandName": "Project", - "dotnetRunMessages": true, - "launchBrowser": false, - "applicationUrl": "http://localhost:5047", - "environmentVariables": { - "ASPNETCORE_ENVIRONMENT": "Development" - } - }, - "https": { - "commandName": "Project", - "dotnetRunMessages": true, - "launchBrowser": false, - "applicationUrl": "https://localhost:7073;http://localhost:5047", - "environmentVariables": { - "ASPNETCORE_ENVIRONMENT": "Development" - } - } - } -} diff --git a/src/common/dotnet/NetRemoteService/Services/NetRemoteService.cs b/src/common/dotnet/NetRemoteService/Services/NetRemoteService.cs deleted file mode 100644 index be668d8d..00000000 --- a/src/common/dotnet/NetRemoteService/Services/NetRemoteService.cs +++ /dev/null @@ -1,15 +0,0 @@ - -using Grpc = global::Grpc.Core; - -namespace Microsoft.Net.Remote.Service -{ - public class NetRemoteService : NetRemote.NetRemoteBase - { - private readonly ILogger _logger; - - public NetRemoteService(ILogger logger) - { - _logger = logger; - } - } -} diff --git a/src/common/dotnet/NetRemoteService/appsettings.Development.json b/src/common/dotnet/NetRemoteService/appsettings.Development.json deleted file mode 100644 index ff66ba6b..00000000 --- a/src/common/dotnet/NetRemoteService/appsettings.Development.json +++ /dev/null @@ -1,8 +0,0 @@ -{ - "Logging": { - "LogLevel": { - "Default": "Information", - "Microsoft.AspNetCore": "Warning" - } - } -} diff --git a/src/common/dotnet/NetRemoteService/appsettings.json b/src/common/dotnet/NetRemoteService/appsettings.json deleted file mode 100644 index e559d3aa..00000000 --- a/src/common/dotnet/NetRemoteService/appsettings.json +++ /dev/null @@ -1,14 +0,0 @@ -{ - "Logging": { - "LogLevel": { - "Default": "Information", - "Microsoft.AspNetCore": "Warning" - } - }, - "AllowedHosts": "*", - "Kestrel": { - "EndpointDefaults": { - "Protocols": "Http2" - } - } -} diff --git a/src/common/dotnet/NetRemoteClientUnitTest/GlobalUsings.cs b/tests/integration/dotnet/GlobalUsings.cs similarity index 100% rename from src/common/dotnet/NetRemoteClientUnitTest/GlobalUsings.cs rename to tests/integration/dotnet/GlobalUsings.cs diff --git a/src/common/dotnet/NetRemoteClientUnitTest/NetRemoteClientUnitTest.csproj b/tests/integration/dotnet/NetRemoteClient.IntegrationTests.csproj similarity index 74% rename from src/common/dotnet/NetRemoteClientUnitTest/NetRemoteClientUnitTest.csproj rename to tests/integration/dotnet/NetRemoteClient.IntegrationTests.csproj index 9b289d19..bdbbcf18 100644 --- a/src/common/dotnet/NetRemoteClientUnitTest/NetRemoteClientUnitTest.csproj +++ b/tests/integration/dotnet/NetRemoteClient.IntegrationTests.csproj @@ -1,13 +1,13 @@ - net7.0 + net8.0 enable enable false true - AnyCPU;x64;ARM64;ARM32;x86 + AnyCPU;x64;ARM64 @@ -18,7 +18,7 @@ - + diff --git a/src/common/dotnet/NetRemoteClientUnitTest/UnitTestNetRemoteClient.cs b/tests/integration/dotnet/NetRemoteClientTests.cs similarity index 60% rename from src/common/dotnet/NetRemoteClientUnitTest/UnitTestNetRemoteClient.cs rename to tests/integration/dotnet/NetRemoteClientTests.cs index fed05cf3..4b2b47ce 100644 --- a/src/common/dotnet/NetRemoteClientUnitTest/UnitTestNetRemoteClient.cs +++ b/tests/integration/dotnet/NetRemoteClientTests.cs @@ -3,10 +3,10 @@ using Microsoft.Net.Remote.Wifi; using Microsoft.Net.Remote.Service; -namespace Microsoft.Net.Remote.Client.Test +namespace Microsoft.Net.Remote.Client.IntegrationTests { [TestClass] - public class UnitTestNetRemoteClient + public class NetRemoteClientTests { private static readonly string AddressHttp = "http://localhost:5047"; private static readonly string AddressHttps = "https://localhost:7073"; @@ -34,5 +34,22 @@ internal static GrpcConnection CreateConnection(ConnectionType connectionType) return new GrpcConnection(channel, client); } + + [TestMethod] + public void CanCreateGrpcChannel() + { + // Verify that a gRPC channel can be created with the expected address + using var channel = GrpcChannel.ForAddress(AddressHttp); + Assert.IsNotNull(channel); + } + + [TestMethod] + public void CanCreateNetRemoteClient() + { + // Verify that a NetRemote client can be instantiated + using var channel = GrpcChannel.ForAddress(AddressHttp); + var client = new NetRemote.NetRemoteClient(channel); + Assert.IsNotNull(client); + } } }