94 lines
4.6 KiB
C#
94 lines
4.6 KiB
C#
using System;
|
|
using System.IO;
|
|
using com.itac.mes.imsapi.client.dotnet;
|
|
|
|
internal sealed class Probe : IMSApiDotNetBase
|
|
{
|
|
public string Get(string key, string fallback = null) => Prop(key, fallback);
|
|
public override int imsapiGetLibraryVersion(ref string libraryVersion)
|
|
{
|
|
libraryVersion = "probe";
|
|
return 0;
|
|
}
|
|
}
|
|
|
|
internal static class Program
|
|
{
|
|
private static int Main(string[] args)
|
|
{
|
|
string assemblyLocation = typeof(IMSApiDotNetBase).Assembly.Location;
|
|
string assemblyDirectory = Path.GetDirectoryName(Path.GetFullPath(assemblyLocation));
|
|
if (string.IsNullOrWhiteSpace(assemblyDirectory))
|
|
{
|
|
Console.Error.WriteLine("Unable to resolve IMSApiDotNet.dll directory.");
|
|
return 2;
|
|
}
|
|
|
|
string file = Path.Combine(assemblyDirectory, "ihas.properties");
|
|
string oldCwd = Directory.GetCurrentDirectory();
|
|
string wrongDirectory = Path.Combine(Path.GetTempPath(), "IMSApiDotNet-ihas-wrong-" + Guid.NewGuid().ToString("N"));
|
|
Directory.CreateDirectory(wrongDirectory);
|
|
|
|
try
|
|
{
|
|
// Correct file: it MUST be located next to the loaded IMSApiDotNet.dll.
|
|
File.WriteAllText(file,
|
|
"# FIX6 DLL-directory property smoke test\r\n" +
|
|
"file.only=from-dll-directory\r\n" +
|
|
"precedence=from-file\r\n" +
|
|
"itac.appid=FromDllProperties\r\n" +
|
|
"itac.artes.clusternodes=https://partner.itacsoftware.com:8181/mes\r\n");
|
|
|
|
// Deliberately place conflicting files elsewhere. Neither the current
|
|
// working directory nor itac.propdir may control the physical file
|
|
// lookup anymore.
|
|
File.WriteAllText(Path.Combine(wrongDirectory, "ihas.properties"),
|
|
"file.only=WRONG-DIRECTORY\r\n" +
|
|
"itac.appid=WrongDirectory\r\n");
|
|
Directory.SetCurrentDirectory(wrongDirectory);
|
|
IMSApiDotNet.setProperty("itac.propdir", wrongDirectory);
|
|
|
|
// Programmatic values still override the same key from ihas.properties.
|
|
IMSApiDotNet.setProperty("precedence", "from-setProperty");
|
|
|
|
var p = new Probe();
|
|
if (p.Get("file.only") != "from-dll-directory") return Fail("file.only", p.Get("file.only"), "from-dll-directory");
|
|
if (p.Get("precedence") != "from-setProperty") return Fail("precedence", p.Get("precedence"), "from-setProperty");
|
|
if (p.Get("missing", "fallback") != "fallback") return Fail("missing", p.Get("missing", "fallback"), "fallback");
|
|
if (p.Get("itac.appid") != "FromDllProperties") return Fail("itac.appid", p.Get("itac.appid"), "FromDllProperties");
|
|
if (p.Get("itac.artes.clusternodes") != "https://partner.itacsoftware.com:8181/mes")
|
|
return Fail("itac.artes.clusternodes", p.Get("itac.artes.clusternodes"), "https://partner.itacsoftware.com:8181/mes");
|
|
|
|
// Verify the real public API reports the raw file value. Programmatic
|
|
// setProperty must not replace this diagnostic line.
|
|
IMSApiDotNet.setProperty("itac.artes.clusternodes", "https://override.invalid/mes");
|
|
string libraryVersion = null;
|
|
var api = IMSApiDotNet.loadLibrary();
|
|
int versionRc = api.imsapiGetLibraryVersion(ref libraryVersion);
|
|
if (versionRc != 0) return Fail("imsapiGetLibraryVersion rc", versionRc.ToString(), "0");
|
|
if (libraryVersion == null || libraryVersion.IndexOf("itac.artes.clusternodes=https://partner.itacsoftware.com:8181/mes", StringComparison.Ordinal) < 0)
|
|
return Fail("libraryVersion cluster node", libraryVersion, "raw ihas.properties cluster node");
|
|
if (libraryVersion.IndexOf(file, StringComparison.OrdinalIgnoreCase) < 0)
|
|
return Fail("libraryVersion ihas.properties path", libraryVersion, file);
|
|
|
|
Console.WriteLine("PASS dll-directory");
|
|
Console.WriteLine(libraryVersion);
|
|
Console.WriteLine("IMSApiDotNet.dll: " + assemblyLocation);
|
|
Console.WriteLine("ihas.properties: " + file);
|
|
return 0;
|
|
}
|
|
finally
|
|
{
|
|
Directory.SetCurrentDirectory(oldCwd);
|
|
try { if (File.Exists(file)) File.Delete(file); } catch { }
|
|
try { if (Directory.Exists(wrongDirectory)) Directory.Delete(wrongDirectory, true); } catch { }
|
|
}
|
|
}
|
|
|
|
private static int Fail(string key, string actual, string expected)
|
|
{
|
|
Console.Error.WriteLine("FAIL " + key + ": actual=<" + actual + "> expected=<" + expected + ">");
|
|
return 1;
|
|
}
|
|
}
|