singrdk/base/Applications/TestUtil/TestUtil.cs

117 lines
3.7 KiB
C#

////////////////////////////////////////////////////////////////////////////////
//
// Copyright (c) Microsoft Corporation. All rights reserved.
//
// Note: Test utility program
//
using System;
using System.Diagnostics;
using System.Net.IP;
using Microsoft.Singularity;
using Microsoft.Singularity.Channels;
using Microsoft.Singularity.Directory;
using Microsoft.SingSharp;
using NetStack.Contracts;
using NetStack.Channels.Public;
using Microsoft.Contracts;
using Microsoft.SingSharp.Reflection;
using Microsoft.Singularity.Applications;
using Microsoft.Singularity.Io;
using Microsoft.Singularity.Configuration;
[assembly: Transform(typeof(ApplicationResourceTransform))]
namespace Microsoft.Singularity.Applications
{
[ConsoleCategory(HelpMessage="Test utility application", DefaultAction=true)]
internal class DefaultConfig
{
[Endpoint]
public readonly TRef<UnicodePipeContract.Exp:READY> Stdin;
[Endpoint]
public readonly TRef<UnicodePipeContract.Imp:READY> Stdout;
[Endpoint]
public readonly TRef<IPContract.Imp:Start> ipRef;
reflective internal DefaultConfig();
internal int AppMain() {
return TestUtil.DefaultMain(this);
}
}
public class TestUtil
{
public static void WriteInterfaceLine([Claims] InterfaceInfo ifInfo, string! ifName)
{
bool found = false;
delete ifInfo.driverName;
delete ifInfo.driverVersion;
InterfaceIPInfo[] in ExHeap ipConfigs = ifInfo.ipConfigs;
if (ipConfigs != null) {
for (int i = 0; i < ipConfigs.Length; i++) {
InterfaceIPInfo ipc = ipConfigs[i];
IPv4 ipv4 = new IPv4(ipc.address);
Console.WriteLine("TESTUTIL:IPAddress: {0,-14}", ipv4);
DebugStub.WriteLine("TESTUTIL:IPAddress:{0}:", __arglist(ipv4.ToString()));
found |= true;
}
delete ipConfigs;
}
if (found == false)
DebugStub.WriteLine("TESTUTIL:IPAddress: Not available.");
}
internal static int DefaultMain(DefaultConfig! config)
{
IPContract.Imp ipConn = ((!)config.ipRef).Acquire();
if (ipConn == null) {
throw new Exception("Unable to acquire handle to the IP network");
}
ipConn.RecvReady();
char[][]! in ExHeap ifNames;
ipConn.SendGetInterfaces();
ipConn.RecvInterfaceList(out ifNames);
for (int i = 0; i < ifNames.Length; ++i) {
CustomVector.Expose(ifNames, i);
char[] in ExHeap ifName = ifNames[i];
if (ifName == null)
throw new Exception("ifName is null");
string! deviceName = Bitter.ToString2(ifName);
CustomVector.UnExpose(ifNames, i);
ipConn.SendGetInterfaceState(Bitter.FromString2(deviceName));
switch receive {
case ipConn.InterfaceNotFound() :
Console.WriteLine("Unexpected error");
break;
case ipConn.InterfaceState(InterfaceInfo ifInfo) :
WriteInterfaceLine(ifInfo, deviceName);
break;
case ipConn.ChannelClosed() :
throw new Exception("ipConn channel closed");
}
}
delete ifNames;
delete ipConn;
return 0;
}
} // end class TestUtil
}