public void TestMutationDetection() { // tests the object mutation detector using (Reference <ILogger> loggerRef = Reference <ILogger> .Create(new TraceLogger(true))) { using (CoreServer server = new CoreServer(loggerRef, "UTT", NodeType.Router)) { // start server server.Start(); using (ICoreClient client = new CoreClientFactory(loggerRef).SetEnv("UTT").Create()) { // create reference object TestData data0 = new TestData("Zero", 0); client.SaveObject(data0, "Item0", null); ICoreItem item = client.LoadItem <TestData>("Item0"); string text = item.Text; TestData data = item.GetData <TestData>(false); // - assert not mutated Assert.AreEqual(text, XmlSerializerHelper.SerializeToString(item.GetData <TestData>(false))); // - mutate the object data.field1 = "One"; data.field2 = 1; // - assert mutated Assert.AreNotEqual(text, XmlSerializerHelper.SerializeToString(item.GetData <TestData>(false))); } // shutdown server.Stop(); } } }
public CoreServer[] GetHosts() { var hostList = new List <CoreServer>(); var hostListRoot = CurrentConfig["hosts"].AsArray; foreach (var item in hostListRoot.Children) { hostList.Add(new CoreServer() { Address = item["address"], Port = int.Parse(item["port"]), Name = item["name"], }); } //Deafults var masterServer = new CoreServer() { Name = "CVRE Qualifier Server", Address = "beta.networkauditor.org", Port = 10166 }; if (!hostList.Any(cs => cs.Address == masterServer.Address)) { hostList.Add(masterServer); SaveHosts(hostList.ToArray()); } return(hostList.ToArray()); }
public static async Task <Packet> RequestResponse(CoreServer host, Packet packet, Type responseType, string username, ulong userId) { return(await new IndividualHostScraper { Host = host, UserId = userId, Username = username }.SendRequest(packet, responseType)); }
public void TestSerialisingInterfaceTypes() { // tests control of the serialisation type // - interface types using (Reference <ILogger> loggerRef = Reference <ILogger> .Create(new TraceLogger(true))) { using (CoreServer server = new CoreServer(loggerRef, "UTT", NodeType.Router)) { // start server server.Start(); using (ICoreClient client = new CoreClientFactory(loggerRef).SetEnv("UTT").Create()) { AssetMeasureValue codeValueInstance = new AssetMeasureValue() { Code = "Test", Description = "This is a test", Source = "UnitTest" }; IFpMLCodeValue codeValueInterface = codeValueInstance; // save reference item client.SaveObject(codeValueInstance, "Test0", null, TimeSpan.MaxValue); ICoreItem itemA = client.LoadItem("Test0"); Assert.AreEqual(typeof(AssetMeasureValue).FullName, itemA.DataTypeName); // test interface and instance both serialise identically { client.SaveUntypedObject(codeValueInterface, "Test1", null); ICoreItem itemB = client.LoadItem("Test1"); Assert.AreEqual(typeof(AssetMeasureValue).FullName, itemB.DataTypeName); Assert.AreEqual(itemA.Text, itemB.Text); } { client.SaveObject((AssetMeasureValue)codeValueInterface, "Test2", null, TimeSpan.MaxValue); ICoreItem itemB = client.LoadItem("Test2"); Assert.AreEqual(typeof(AssetMeasureValue).FullName, itemB.DataTypeName); Assert.AreEqual(itemA.Text, itemB.Text); } { // this should fail because interfaces cant be serialised UnitTestHelper.AssertThrows <ArgumentException>("Cannot be an interface type!\r\nParameter name: dataType", () => { client.SaveObject(codeValueInterface, "Test3", null, TimeSpan.MaxValue); }); } { // note: this silently binds to SaveObject<IFpMLCodeValue>(...) which should fail UnitTestHelper.AssertThrows <ArgumentException>("Cannot be an interface type!\r\nParameter name: dataType", () => { client.SaveObject(codeValueInterface, "Test4", null, TimeSpan.MaxValue); }); } } // shutdown server.Stop(); } } }
public void TestBasicEncryption() { // tests key creation and exchange // - between 2 clients using (Reference <ILogger> loggerRef = Reference <ILogger> .Create(new TraceLogger(true))) { using (CoreServer server = new CoreServer(loggerRef, "UTT", NodeType.Router)) { server.Start(); using (ICoreClient sender = new CoreClientFactory(loggerRef).SetEnv("UTT").Create()) using (ICoreClient recver = new CoreClientFactory(loggerRef).SetEnv("UTT").Create()) { // check un-encrypted traffic Guid evtId1 = sender.SaveObject <TestData>(new TestData("1", 1), "test", null, TimeSpan.MaxValue); List <ICoreItem> recdList1 = recver.LoadItems <TestData>(Expr.ALL); Assert.AreEqual <int>(1, recdList1.Count); ICoreItem recdItem1 = recdList1[0]; Assert.AreEqual <Guid>(evtId1, recdItem1.Id); Assert.IsNull(recdItem1.TranspKeyId); Assert.IsNull(recdItem1.SenderKeyId); Assert.IsNull(recdItem1.RecverKeyId); // generate keys string senderKeyId = sender.CryptoManager.GenerateNewKeys(); string recverKeyId = recver.CryptoManager.GenerateNewKeys(); // send encrypted message and check receiver fails to decrypt ICoreItem sentItem2 = sender.MakeObject <TestData>(new TestData("2", 2), "test", null); sentItem2.TranspKeyId = senderKeyId; sentItem2.SenderKeyId = senderKeyId; Guid evtId2 = sender.SaveItem(sentItem2); List <ICoreItem> recdList2 = recver.LoadItems <TestData>(Expr.ALL); Assert.AreEqual <int>(1, recdList2.Count); ICoreItem recdItem2 = recdList2[0]; Assert.AreEqual <Guid>(evtId2, recdItem2.Id); Assert.AreEqual <Guid>(evtId2, recdItem2.Id); Assert.AreEqual <string>(senderKeyId, recdItem2.TranspKeyId); Assert.AreEqual <string>(senderKeyId, recdItem2.SenderKeyId); Assert.IsNull(recver.CryptoManager.GetTranspKey(senderKeyId)); // set public key at receiver and check authentication recver.CryptoManager.SetPublicKey(senderKeyId, sender.CryptoManager.GetPublicKey(senderKeyId)); Assert.IsTrue(recdItem2.IsSigned); Assert.IsFalse(recdItem2.IsSecret); // set transport key at receiver and recheck decryption recver.CryptoManager.SetTranspKey(senderKeyId, sender.CryptoManager.GetTranspKey(senderKeyId)); object data2 = recdItem2.Data; Assert.IsNotNull(data2); Assert.AreEqual <Type>(typeof(TestData), data2.GetType()); } server.Stop(); } } }
static async Task Main(string[] args) { Log.Logger = new LoggerConfiguration() .Enrich.FromLogContext() .WriteTo.Console() .MinimumLevel.Verbose() .CreateLogger(); Log.Logger.Information("Starting Automatica.Core.CI database tool"); var config = new ConfigurationBuilder() .SetBasePath(new FileInfo(Assembly.GetEntryAssembly().Location).DirectoryName) .AddJsonFile("appsettings.json", true) .Build(); var fi = new FileInfo(Assembly.GetEntryAssembly().Location); if (File.Exists(Path.Combine(fi.DirectoryName, DatabaseConstants.DatabaseInitName))) { File.Delete(Path.Combine(fi.DirectoryName, DatabaseConstants.DatabaseInitName)); } var hostBuilder = new HostBuilder().ConfigureServices((hostContext, services) => { var startup = new Startup(config); startup.ConfigureServices(services); } ).Build(); string loadDirectory = ""; if (args.Length > 0) { loadDirectory = args[0]; } else { loadDirectory = fi.DirectoryName; } DatabaseInit.EnsureDatabaseCreated(hostBuilder.Services); var server = new CoreServer(hostBuilder.Services); await server.Load(loadDirectory, "*.dll"); Console.WriteLine($"Done...."); Environment.Exit(0); }
internal override bool Validate(PlayerHandle sender, CoreServer server) { if (!base.Validate(sender, server)) { return(false); } this.recepient = server.World.FindPlayer(this.recepientName); if (this.recepient == null) { return(false); } // return server.World.FindLobby(this.lobbyIdentifier) == null; return(true); }
public void TestSaveLoadPrivateCacheItems() { using (Reference <ILogger> loggerRef = Reference <ILogger> .Create(new TraceLogger(true))) using (CoreServer server = new CoreServer(loggerRef, "UTT", NodeType.Router)) { server.Start(); using (ICoreClient client = new CoreClientFactory(loggerRef).SetEnv("UTT").Create()) using (ICoreCache cacheA = client.CreateCache()) { Guid id = cacheA.SavePrivateObject("data", "name1", null); //ICoreItem item = cacheA.LoadPrivateItem<string>("name1"); ICoreItem item = cacheA.LoadItem <string>("name1"); string data = (string)item.Data; Assert.AreEqual <string>("data", data); } } }
public void TestWebServiceStartStop() { using (Reference <ILogger> loggerRef = Reference <ILogger> .Create(new TraceLogger(true))) { using (var coreServer = new CoreServer(loggerRef, "UTT", NodeType.Router)) { coreServer.Start(); using (Reference <ICoreClient> clientRef = Reference <ICoreClient> .Create(new CoreClientFactory(loggerRef).SetEnv("UTT").Create())) using (var httpServer = new WebProxyServer()) { httpServer.LoggerRef = loggerRef; httpServer.Client = clientRef; httpServer.Start(); } } } }
public void CreateHost(int port) { Server = new CoreServer(port, connectionInfo.secretKey); Server.RegisterNestedType <ConnectedPeer>(); Server.OnPeerDisconnected() .Subscribe(OnPeerDisconnected) .AddTo(this); Server.OnReceivedSerializedComponent() .Subscribe(OnReceivedSerializedComponent) .AddTo(this); Server.RegisterToPacket <PlayerJoinRequestPacket, NetPeer>() .Subscribe(OnPlayerJoinRequestPacketReceived) .AddTo(this); Server.Start(); _onHostCreated.OnNext(Unit.Default); }
internal async Task <State> ScrapeState(CoreServer self = null) { return(await Task.Run(() => { var client = StartConnection(); var state = client.Connected ? client.State : null; //Add our self to the server's list of active servers if (self != null && client.Connected) { client.Send(new Packet(new Event { Type = Event.EventType.HostAdded, ChangedObject = self })).AsyncWaitHandle.WaitOne(); } client.Shutdown(); return state; })); }
public CurveUnitTestEnvironment(string nameSpace) { NameSpace = nameSpace; string env = EnvHelper.EnvName(EnvId.Utt_UnitTest); var stopwatch = new Stopwatch(); stopwatch.Start(); var random = new Random(Environment.TickCount); int port = random.Next(8000, 8099); _server = new CoreServer(_logRef, env, NodeType.Router, port, WcfConst.NetTcp); _server.Start(); _client = new CoreClientFactory(_logRef) .SetEnv(env) .SetServers("localhost:" + port.ToString(CultureInfo.InvariantCulture)) .SetProtocols(WcfConst.NetTcp) .Create(); Cache = _client.CreateCache(); LoadConfigDataHelper.LoadCurveConfigurationData(_logRef.Target, Cache, nameSpace); stopwatch.Stop(); Debug.Print("Initialized test environment, in {0} seconds", stopwatch.Elapsed.TotalSeconds); }
public void TestRequestThrottling() { const int numberOfAsyncRequests = 1000; const int serverPort = 9001; string hostAddress = $"localhost:{serverPort}"; using (Reference <ILogger> loggerRef = Reference <ILogger> .Create(new TraceLogger(true))) { NamedValueSet serverSettings = new NamedValueSet(); serverSettings.Set(CfgPropName.EnvName, "UTT"); serverSettings.Set(CfgPropName.Port, serverPort); serverSettings.Set(CfgPropName.Endpoints, WcfConst.NetTcp); using (CoreServer server = new CoreServer(loggerRef, serverSettings)) { server.Start(); using (ICoreClient client = new CoreClientFactory(loggerRef).SetEnv("UTT").SetServers(hostAddress).Create()) { List <IAsyncResult> completions = new List <IAsyncResult>(); try { for (int i = 0; i < numberOfAsyncRequests; i++) { completions.Add(client.SaveObjectBegin(new TestData("Test", i), "Test", null, false, TimeSpan.MaxValue)); //loggerRef.Target.LogDebug("[{0}] save begun...", i.ToString("0000")); } } finally { for (int i = 0; i < numberOfAsyncRequests; i++) { client.SaveEnd(completions[i]); //loggerRef.Target.LogDebug("[{0}] save done.", i.ToString("0000")); } } } } } }
public void TestManualRecovery() { // demonstrates how an application should use the client in its simplest (transient) mode: // - exceptions should be handled by the application; // - client must be disposed and recreated after an exception has occurred; // - subscriptions are not supported. //TimeSpan outageDuration = TimeSpan.FromMinutes(1); //TimeSpan requestTimeout = TimeSpan.FromSeconds(30); using (Reference <ILogger> loggerRef = Reference <ILogger> .Create(new TraceLogger(true))) { loggerRef.Target.LogDebug("----------> test commenced"); // create unit test storage IStoreEngine unitTestStore = new UnitTestStoreEngine(loggerRef.Target); CoreServer server = null; try { var serverSettings = new NamedValueSet(); serverSettings.Set(CfgPropName.NodeType, (int)NodeType.Server); serverSettings.Set(CfgPropName.EnvName, "UTT"); server = new CoreServer(loggerRef, serverSettings) { StoreEngine = unitTestStore }; loggerRef.Target.LogDebug("----------> starting server"); server.Start(); // create 1st client and save object - should succeed Guid id1; using (ICoreClient client1 = new CoreClientFactory(loggerRef) .SetEnv("UTT") .Create()) { id1 = client1.SaveObject(new TestData("Test1", 1), "Test1", null, TimeSpan.MaxValue); // stop server and begin save - should fail with timeout loggerRef.Target.LogDebug("----------> stopping server"); server.Stop(); DisposeHelper.SafeDispose(ref server); client1.RequestTimeout = TimeSpan.FromSeconds(10); UnitTestHelper.AssertThrows <TimeoutException>(() => { client1.SaveObject(new TestData("Test2a", 2), "Test2", null, TimeSpan.MaxValue); }); // further use of client throws more timeout errors UnitTestHelper.AssertThrows <TimeoutException>(() => { client1.LoadObject <TestData>("Test2a"); }); } // create 2nd client - should fail to connect UnitTestHelper.AssertThrows <EndpointNotFoundException>("No server in list 'localhost:8113' found!", () => { using (ICoreClient client2 = new CoreClientFactory(loggerRef) .SetEnv("UTT") .Create()) { client2.SaveObject <TestData>(new TestData("Test2b", 2), "Test2", null, TimeSpan.MaxValue); } }); // restart server server = new CoreServer(loggerRef, serverSettings) { StoreEngine = unitTestStore }; loggerRef.Target.LogDebug("----------> restarting server"); server.Start(); // load 1st object - should succeed ICoreItem item1; ICoreItem item2; using (ICoreClient client3 = new CoreClientFactory(loggerRef) .SetEnv("UTT") .Create()) { item1 = client3.LoadItem <TestData>("Test1"); item2 = client3.LoadItem <TestData>("Test2"); } Assert.IsNotNull(item1); Assert.AreEqual(id1, item1.Id); Assert.IsNull(item2); // done loggerRef.Target.LogDebug("----------> test completed"); server.Stop(); DisposeHelper.SafeDispose(ref server); } finally { DisposeHelper.SafeDispose(ref server); } } }
public void TestServerBridge() { // required environment: // - local env (eg. DEV) server // - lower env (eg. UTT) server // creates the bridge, and check all messages published // in local env are re-published correctly in lower env EnvId localEnvId = EnvId.Dev_Development; string localEnvName = EnvHelper.EnvName(localEnvId); EnvId lowerEnvId = (localEnvId - 1); string lowerEnvName = EnvHelper.EnvName(lowerEnvId); int localPort = 9214; int lowerPort = 9114; using (Reference <ILogger> loggerRef = Reference <ILogger> .Create(new TraceLogger(true))) { CoreClientFactory clientfactory = new CoreClientFactory(loggerRef); using (CoreServer localServer = new CoreServer(loggerRef, localEnvName, NodeType.Router, localPort)) using (CoreServer lowerServer = new CoreServer(loggerRef, lowerEnvName, NodeType.Router, lowerPort)) { // start servers localServer.Start(); lowerServer.Start(); // create clients using (Reference <ICoreClient> localClientRef = Reference <ICoreClient> .Create(clientfactory.SetEnv(localEnvName).SetServers("localhost:" + localPort).Create())) using (ICoreClient lowerClient = clientfactory.SetEnv(lowerEnvName).SetServers("localhost:" + lowerPort).Create()) { using (ServerBridge bridge = new ServerBridge()) { bridge.LoggerRef = loggerRef; bridge.Client = localClientRef; bridge.TargetClient = lowerClient; // test begins here // - start the bridge bridge.Start(); const int sendCount = 500; const int maxWaitSeconds = 5; long excpCount = 0; long recdCount = 0; // subscribe to objects on downstream server ISubscription subs = lowerClient.Subscribe <TestData>(Expr.ALL, delegate(ISubscription subscription, ICoreItem item) { // receiver long count = Interlocked.Increment(ref recdCount); try { TestData data = (TestData)item.Data; //loggerRef.Target.LogDebug("Recd[{0}]", data.field2); Assert.AreEqual <long>(count, data.field2); } catch (Exception) { Interlocked.Increment(ref excpCount); } }, null); long sentCount = 0; // publish n Server events for (int i = 1; i <= sendCount; i++) { Interlocked.Increment(ref sentCount); localClientRef.Target.SaveObject <TestData>(new TestData("Test", i), "Test", null, TimeSpan.MaxValue); } // wait for a short period DateTimeOffset waitStart = DateTimeOffset.Now; DateTimeOffset waitExpiry = waitStart.AddSeconds(maxWaitSeconds); while ((Interlocked.Add(ref recdCount, 0) < Interlocked.Add(ref sentCount, 0)) && (DateTimeOffset.Now < waitExpiry) && (Interlocked.Add(ref excpCount, 0) == 0)) { Thread.Sleep(TimeSpan.FromSeconds(1.0)); loggerRef.Target.LogDebug("Recd/Sent: {0}/{1} items...", Interlocked.Add(ref recdCount, 0), Interlocked.Add(ref sentCount, 0)); } loggerRef.Target.LogDebug("Duration: {0}", (DateTimeOffset.Now - waitStart)); Assert.AreEqual <long>(0, excpCount); Assert.AreEqual <long>(sendCount, recdCount); // done Assert.IsTrue(true); } } } } }
public void TestPagingTechniques() { const bool debugRequests = true; // loads/saves a very large number of objects const int maxLoopCount = 5; const int itemsPerLoop = 400; const int itemsPerPage = 154; const int totalItems = maxLoopCount * itemsPerLoop; using (Reference <ILogger> loggerRef = Reference <ILogger> .Create(new TraceLogger(true))) { NamedValueSet serverSettings = new NamedValueSet(); serverSettings.Set(CfgPropName.NodeType, (int)NodeType.Router); serverSettings.Set(CfgPropName.EnvName, "UTT"); using (CoreServer server = new CoreServer(loggerRef, serverSettings)) { server.Start(); // save using (ICoreClient client1 = new CoreClientFactory(loggerRef).SetEnv("UTT").Create()) { for (int loop = 0; loop < maxLoopCount; loop++) { ICoreItem[] items = new ICoreItem[itemsPerLoop]; for (int i = 0; i < itemsPerLoop; i++) { client1.DebugRequests = i == 0; int n = loop * itemsPerLoop + i; TestData data = new TestData(n.ToString(), n); NamedValueSet props = new NamedValueSet(new NamedValue("n", n)); items[i] = client1.MakeObject(data, "Test." + n, props); } client1.SaveItems(items); } } // load (using original paging technique) loggerRef.Target.LogDebug("---------- multi page load"); // - slow because it scans and sort the entire data set for each page using (ICoreClient client3 = new CoreClientFactory(loggerRef).SetEnv("UTT").Create()) { // count the items int itemCount1 = client3.CountObjects <TestData>(null); // now get the items in pages IExpression orderExpr = Expr.Prop("n"); client3.DebugRequests = debugRequests; int itemCount2 = 0; int startRow = 0; List <ICoreItem> page; do { page = client3.LoadItems <TestData>(null, orderExpr, startRow, itemsPerPage); itemCount2 += page.Count; startRow += page.Count; }while (page.Count == itemsPerPage); Assert.AreEqual(totalItems, itemCount1); Assert.AreEqual(totalItems, itemCount2); } // paged load (using pre-load of item header info) loggerRef.Target.LogDebug("---------- header pre-load"); // - faster because it only scans sorts the entire data set once and sorting // can use local compiled methods instead of server-side expression evaluation. using (ICoreClient client4 = new CoreClientFactory(loggerRef).SetEnv("UTT").Create()) { // get all the items (without data) List <ICoreItemInfo> itemInfoList = client4.LoadItemInfos <TestData>(null); int itemCount1 = itemInfoList.Count; // optionally sort the list here //IExpression orderExpr = Expr.Prop("n"); // now get the items in pages client4.DebugRequests = debugRequests; int itemCount2 = 0; int maxPages = ((itemCount1 / itemsPerPage) + 1); for (int pageNum = 0; pageNum < maxPages; pageNum++) { // get the item names/ids for the current page int startRow = itemsPerPage * pageNum; List <string> itemNames = new List <string>(); for (int i = 0; i < itemsPerPage; i++) { int n = startRow + i; if (n < itemCount1) { itemNames.Add(itemInfoList[n].Name); } } // now get the objects (with data) var page = client4.LoadItems <TestData>(itemNames); itemCount2 += page.Count; } Assert.AreEqual(totalItems, itemCount1); Assert.AreEqual(totalItems, itemCount2); } } } }
public void TestStressServerLoadAndSubscribe() { // return an increasing number of trades until failure // on a 4GB workstation, the limit is about 13,000 trades. Trade trade = XmlSerializerHelper.DeserializeFromString <Trade>( ResourceHelper.GetResourceWithPartialName(Assembly.GetExecutingAssembly(), "SampleSwap.xml")); NamedValueSet tradeProps = new NamedValueSet( ResourceHelper.GetResourceWithPartialName(Assembly.GetExecutingAssembly(), "SampleSwap.nvs")); using (Reference <ILogger> loggerRef = Reference <ILogger> .Create(new TraceLogger(true))) { NamedValueSet serverSettings = new NamedValueSet(); serverSettings.Set(CfgPropName.NodeType, (int)NodeType.Router); serverSettings.Set(CfgPropName.EnvName, "UTT"); using (CoreServer server = new CoreServer(loggerRef, serverSettings)) { server.Start(); using (ICoreClient client = new CoreClientFactory(loggerRef).SetEnv("UTT").SetServers("localhost:8113").Create()) //using (ICoreClient client = new CoreClientFactory(loggerRef).SetEnv(EnvId.DEV_Development).Create()) { // delete the test trades IExpression deleteExpr = Expr.StartsWith(Expr.SysPropItemName, "Test."); client.DeleteObjects <Trade>(deleteExpr); const int maxLoops = 6; const int loopRepeat = 1; const int incrementPerLoop = 1024; int itemsPerLoop = 8192; int itemsSaved = 0; for (int loop = 0; loop < maxLoops; loop++) { string loopName = $"Test.{loop}."; for (int repeat = 0; repeat < loopRepeat; repeat++) { // create trades loggerRef.Target.LogDebug("[{0}-{1}] Creating {2} trades...", loop, repeat, itemsPerLoop); ICoreItem[] items = new ICoreItem[itemsPerLoop]; for (int i = 0; i < itemsPerLoop; i++) { string tradeName = $"Test.{loop}.{i}"; items[i] = client.MakeObject(trade, tradeName, tradeProps); itemsSaved++; } client.SaveItems(items); // start subscription loggerRef.Target.LogDebug("[{0}-{1}] Receiving {2} trades...", loop, repeat, itemsPerLoop); long itemsReceived = 0; DateTime testStartedTime = DateTime.Now; DateTime lastReceiveTime = testStartedTime; ISubscription subscription = client.CreateSubscription <Trade>(Expr.StartsWith(Expr.SysPropItemName, loopName)); subscription.UserCallback = delegate { Interlocked.Increment(ref itemsReceived); lastReceiveTime = DateTime.Now; }; //subscription.ExcludeDataBody = true; subscription.Start(); // wait a bit to ensure subscription is up to date while ((Interlocked.Add(ref itemsReceived, 0) < itemsPerLoop) && ((DateTime.Now - testStartedTime) < TimeSpan.FromSeconds(10))) { Thread.Sleep(100); } Thread.Sleep(100); subscription.Cancel(); // load all that have been saved loggerRef.Target.LogDebug("[{0}-{1}] Received {2} trades in {3} seconds.", loop, repeat, itemsReceived, (lastReceiveTime - testStartedTime).TotalSeconds); Assert.AreEqual(itemsPerLoop, Interlocked.Add(ref itemsReceived, 0)); // delete the test trades client.DeleteObjects <Trade>(deleteExpr); GC.Collect(); } // next loop itemsPerLoop += incrementPerLoop; } // for loop } } } }
public void TestStressServerLoadAndRetrieve() { // return an increasing number of trades until failure Trade trade = XmlSerializerHelper.DeserializeFromString <Trade>( ResourceHelper.GetResourceWithPartialName(Assembly.GetExecutingAssembly(), "SampleSwap.xml")); NamedValueSet tradeProps = new NamedValueSet( ResourceHelper.GetResourceWithPartialName(Assembly.GetExecutingAssembly(), "SampleSwap.nvs")); using (Reference <ILogger> loggerRef = Reference <ILogger> .Create(new TraceLogger(true))) { NamedValueSet serverSettings = new NamedValueSet(); serverSettings.Set(CfgPropName.NodeType, (int)NodeType.Router); serverSettings.Set(CfgPropName.EnvName, "UTT"); using (CoreServer server = new CoreServer(loggerRef, serverSettings)) { server.Start(); using (ICoreClient client = new CoreClientFactory(loggerRef).SetEnv("UTT").SetServers("localhost:8113").Create()) //using (ICoreClient client = new CoreClientFactory(loggerRef).SetEnv(EnvId.DEV_Development).Create()) { // delete the test trades IExpression deleteExpr = Expr.StartsWith(Expr.SysPropItemName, "Test."); client.DeleteObjects <Trade>(deleteExpr); const int maxLoops = 1; const int loopRepeat = 1; const int incrementPerLoop = 1024; int itemsPerLoop = 8192 - 1024; int itemsSaved = 0; for (int loop = 0; loop < maxLoops; loop++) { for (int repeat = 0; repeat < loopRepeat; repeat++) { // create trades loggerRef.Target.LogDebug("[{0}-{1}] Making {2} trades...", loop, repeat, itemsPerLoop); List <IAsyncResult> completions = new List <IAsyncResult>(); ICoreItem[] items = new ICoreItem[itemsPerLoop]; for (int i = 0; i < itemsPerLoop; i++) { string tradeName = $"Test.{loop}.{i}"; ICoreItem item = client.MakeObject(trade, tradeName, tradeProps); item.Freeze(); // serialises items[i] = item; } loggerRef.Target.LogDebug("[{0}-{1}] Commencing save of {2} trades...", loop, repeat, itemsPerLoop); for (int i = 0; i < itemsPerLoop; i++) { completions.Add(client.SaveItemBegin(items[i])); itemsSaved++; } loggerRef.Target.LogDebug("[{0}-{1}] Completing save of {2} trades...", loop, repeat, itemsPerLoop); foreach (IAsyncResult ar in completions) { client.SaveEnd(ar); } // load all that have been saved string loopName = $"Test.{loop}."; loggerRef.Target.LogDebug("[{0}-{1}] Loading {2} trades...", loop, repeat, itemsPerLoop); List <ICoreItem> tradeItems = client.LoadItems <Trade>(Expr.StartsWith(Expr.SysPropItemName, loopName)); Assert.AreEqual(itemsPerLoop, tradeItems.Count); loggerRef.Target.LogDebug("[{0}-{1}] Unpacking {2} trades...", loop, repeat, itemsPerLoop); List <Trade> trades = new List <Trade>(); foreach (ICoreItem item in tradeItems) { trades.Add((Trade)item.Data); } loggerRef.Target.LogDebug("[{0}-{1}] Retrieved {2} trades.", loop, repeat, itemsPerLoop); // delete the test trades client.DeleteObjects <Trade>(deleteExpr); GC.Collect(); } // next loop itemsPerLoop += incrementPerLoop; } // for loop } } } }
public static async Task <Dictionary <CoreServer, State> > ScrapeHosts(CoreServer[] hosts, string username, ulong userId, CoreServer self = null, Action <CoreServer, State, int, int> onInstanceComplete = null) { var scrapedHosts = new Dictionary <CoreServer, State>(); var finishedCount = 0; Func <CoreServer, Task> scrapeTask = async(host) => { var state = await new IndividualHostScraper() { Host = host, Username = username, UserId = userId }.ScrapeState(self); if (state != null) { scrapedHosts[host] = state; } onInstanceComplete?.Invoke(host, state, ++finishedCount, hosts.Length); }; await Task.WhenAll(hosts.ToList().Select(x => scrapeTask(x))); return(scrapedHosts); }
protected override void OnIndividualInfoScraped(CoreServer host, State state, int count, int total) => UpdateScrapeCount(count, total);
public ServerController(AutomaticaContext dbContext, CoreServer coreServer) : base(dbContext) { _coreServer = coreServer; }
internal override IPromise <Nothing> Process(PlayerHandle sender, CoreServer server) { server.World.CreateLobby(this.lobbyIdentifier); return(Nothing.Resolved()); }
public ServerListItem(CoreServer server) { this.server = server; serverName = server.Name; serverDetails = $"{server.Address}:{server.Port}"; }
private void serverSelectionViewController_selectedServer(CoreServer host) { DestinationCoordinator.DidFinishEvent += destinationCoordinator_DidFinishEvent; DestinationCoordinator.Host = host; PresentFlowCoordinator(DestinationCoordinator); }
protected abstract void OnIndividualInfoScraped(CoreServer host, State state, int count, int total);
public void TestFailingExpressions() { // tests expressions that fail to evaluate on the server using (Reference <ILogger> loggerRef = Reference <ILogger> .Create(new TraceLogger(true))) { NamedValueSet serverSettings = new NamedValueSet(); serverSettings.Set(CfgPropName.NodeType, (int)NodeType.Router); serverSettings.Set(CfgPropName.EnvName, "UTT"); using (CoreServer server = new CoreServer(loggerRef, serverSettings)) { server.Start(); // save using (ICoreClient client1 = new CoreClientFactory(loggerRef).SetEnv("UTT").Create()) { client1.SaveObject(new TestData(), "AllValuesNotNull", new NamedValueSet("StrValue/String=A|NumValue/Int32=0"), TimeSpan.MaxValue); client1.SaveObject(new TestData(), "NumValueIsNull", new NamedValueSet("StrValue/String=A"), TimeSpan.MaxValue); client1.SaveObject(new TestData(), "StrValueIsNull", new NamedValueSet("NumValue/Int32=0"), TimeSpan.MaxValue); client1.SaveObject(new TestData(), "AllValuesAreNull", null, TimeSpan.MaxValue); } // load using expression using (ICoreClient client2 = new CoreClientFactory(loggerRef).SetEnv("UTT").Create()) { client2.DebugRequests = true; { var items = client2.LoadObjects <TestData>(Expr.BoolAND(Expr.IsEQU("StrValue", "A"), Expr.IsEQU("NumValue", 0))); Assert.AreEqual(1, items.Count); } { var items = client2.LoadObjects <TestData>(Expr.BoolOR(Expr.IsEQU("StrValue", "A"), Expr.IsEQU("NumValue", 0))); Assert.AreEqual(3, items.Count); } { // unknown/missing string property var items = client2.LoadObjects <TestData>(Expr.BoolOR(Expr.IsEQU("StrValue", "A"), Expr.IsEQU("XValue", "X"))); Assert.AreEqual(2, items.Count); } { // unknown/missing non-string property var items = client2.LoadObjects <TestData>(Expr.BoolOR(Expr.IsEQU("StrValue", "A"), Expr.IsEQU("YValue", 1))); Assert.AreEqual(2, items.Count); } { // property missing var items = client2.LoadObjects <TestData>(Expr.IsNull("StrValue")); Assert.AreEqual(2, items.Count); } { // property has value var items = client2.LoadObjects <TestData>(Expr.IsNotNull("StrValue")); Assert.AreEqual(2, items.Count); } { var items = client2.LoadObjects <TestData>(Expr.StartsWith("StrValue", "A")); Assert.AreEqual(2, items.Count); } { var items = client2.LoadObjects <TestData>(Expr.BoolOR(Expr.StartsWith("StrValue", "A"), Expr.IsEQU("NumValue", 0))); Assert.AreEqual(3, items.Count); } } } } }
public async Task <Core> StartTcpServer(int port, int backlog) { await CoreServer.StartAsync(port, backlog).ConfigureAwait(false); return(this); }
public static async Task <State> ScrapeHost(CoreServer host, string username, ulong userId, CoreServer self = null, Action <CoreServer, State, int, int> onInstanceComplete = null) => (await ScrapeHosts(new CoreServer[] { host }, username, userId, self, onInstanceComplete)).First().Value;
static void Main(string[] args) { bool interactive = false; for (int i = 0; i < args.Length; i++) { switch (args[i]) { case "/?": case "-h": case "-help": ShowHelp(); return; case "-c": Global.config_file = args[++i]; break; case "-l": Global.config_file = args[++i]; break; case "-i": interactive = true; break; } } if (string.IsNullOrEmpty(Global.log_file)) { Global.log_file = Path.GetDirectoryName(Assembly.GetEntryAssembly().Location) + Path.DirectorySeparatorChar + "EventLog.txt"; } if (string.IsNullOrEmpty(Global.config_file)) { Global.config_file = Path.GetDirectoryName(Assembly.GetEntryAssembly().Location) + Path.DirectorySeparatorChar + "HAILogger.ini"; } Global.event_source = "HAI Logger"; try { Settings.LoadSettings(); } catch { // Errors are logged in LoadSettings(); Environment.Exit(1); } if (Environment.UserInteractive || interactive) { Console.TreatControlCAsInput = false; Console.CancelKeyPress += new ConsoleCancelEventHandler(myHandler); Trace.Listeners.Add(new TextWriterTraceListener(Console.Out)); server = new CoreServer(); } else { ServiceBase[] ServicesToRun; // More than one user Service may run within the same process. To add // another service to this process, change the following line to // create a second service object. For example, // // ServicesToRun = new ServiceBase[] {new Service1(), new MySecondUserService()}; // ServicesToRun = new ServiceBase[] { new Service() }; ServiceBase.Run(ServicesToRun); } }
protected override void OnStart(string[] args) { server = new CoreServer(); }