public void FID1() { var f = new FID(1); var s = f.ToString(); Console.WriteLine(s); Assert.AreEqual("0-0-1", s); }
public void FID4() { var CNT = 100000; var tasks = new List<Task>(); var sets= new List<FID>(); for(var c=0; c<100; c++) { tasks.Add( Task.Factory.StartNew(()=> { var set = new FID[CNT]; for(var i=0; i<CNT; i++) { set[i] = FID.Generate(); } lock(sets) sets.AddRange(set); })); } Task.WaitAll( tasks.ToArray() ); Console.WriteLine("Analyzing {0:n} FIDs", sets.Count); Assert.IsTrue( sets.Distinct().Count() == sets.Count() ); }
public void FID2() { var f = new FID(4353425342532); var s = f.ToString(); Console.WriteLine(s); Assert.AreEqual("3-16096351-68", s); }
public ResponseMsg(FID requestID, Guid? instance, object returnValue) : base() { m_RequestID = requestID; m_RemoteInstance = instance; m_ReturnValue = returnValue; }
/// <summary> /// This .ctor is handy for message inspectors. /// Creates a substitute message for the original one with new value. /// Binding-specific context is cloned and headers/correlation data are cloned conditionaly /// </summary> public ResponseMsg(ResponseMsg inspectedOriginal, object newReturnValue, bool cloneHeaders = true, bool cloneCorrelation = true) : base() { m_RequestID = inspectedOriginal.m_RequestID; m_RemoteInstance = inspectedOriginal.m_RemoteInstance; m_ReturnValue = newReturnValue; CloneState(inspectedOriginal, cloneHeaders, cloneCorrelation); }
/// <summary> /// Tries to get, return and remove CallSlot instance by its RequestID from the list. /// Returns null if CallSlot with such an id does not exist and nothing was removed /// </summary> public CallSlot TryGetAndRemove(FID requestID) { //getBucket() inlined for performance var idx = (requestID.GetHashCode() & CoreConsts.ABS_HASH_MASK) % m_BucketCount; var bucket = m_Buckets[idx]; CallSlot result; if (bucket.TryRemove(requestID, out result)) { return(result); } return(null); }
void IRunnableHook.Prologue(Runner runner, FID id) { var config = CONFIG.AsLaconicConfig(handling: ConvertErrorHandling.Throw); m_App = new ServiceBaseApplication(null, config); m_Sink = (TwilioSink)((MessageService)MessageService.Instance).Sink; Aver.IsNotNull(m_Sink); Aver.IsTrue(m_Sink.Name.EqualsOrdIgnoreCase("Twilio")); Aver.IsTrue(m_Sink.SupportedChannels == MsgChannels.SMS); Aver.IsTrue(m_Sink.SupportedChannelNames.Contains("Twilio")); Aver.IsTrue(m_Sink.Running); }
void IRunnableHook.Prologue(Runner runner, FID id) { var csDefault = "google-drive{{ email='{0}' cert-path=$'{1}' }}" .Args(GOOGLE_DRIVE_EMAIL, GOOGLE_DRIVE_CERT_PATH); CONN_PARAMS = FileSystemSessionConnectParams.Make <GoogleDriveParameters>(csDefault); var csTimeout = "google-drive{{ email='{0}' cert-path=$'{1}' timeout-ms=1 }}" .Args(GOOGLE_DRIVE_EMAIL, GOOGLE_DRIVE_CERT_PATH); CONN_PARAMS_TIMEOUT = FileSystemSessionConnectParams.Make <GoogleDriveParameters>(csTimeout); cleanUp(); initialize(); }
/// <summary> /// Tries to get, return and remove CallSlot instance by its RequestID from the list. /// Returns null if CallSlot with such an id does not exist and nothing was removed /// </summary> public CallSlot TryGetAndRemove(FID requestID) { //getBucket() inlined for performance var idx = Math.Abs(requestID.GetHashCode() % m_BucketCount); var bucket = m_Buckets[idx]; CallSlot result; if (bucket.TryRemove(requestID, out result)) { return(result); } return(null); }
void IRunnableHook.Prologue(Runner runner, FID id) { Console.WriteLine("{0}.{1}".Args(GetType().FullName, "RigSetup()...")); m_FS = new LocalFileSystem(NOPApplication.Instance); var m_TestApp = new SkyApplication(NOPApplication.Instance, SystemApplicationType.TestRig, m_FS, new FileSystemSessionConnectParams(), TestSources.RPATH, TestSources.THIS_HOST, false, null, null); DoRigSetup(); Console.WriteLine("{0}.{1}".Args(GetType().FullName, "...RigSetup() DONE")); }
bool IRunHook.Prologue(Runner runner, FID id, MethodInfo method, RunAttribute attr, ref object[] args) { var node = new ErlLocalNode("test@localhost", true, false); node.Start(); ErlApp.Node = node; store = new ErlDataStore(); store.RemoteName = REMOTE_NAME; store.RemoteCookie = REMOTE_COOKIE; store.QueryResolver.ScriptAssembly = SCRIPT_ASM; //store.QueryResolver.RegisterHandlerLocation("NFX.ITest.CRUD.ErlSpecific, NFX.ITest"); store.Start(); clearAll(); return false; }
void IRunnableHook.Prologue(Runner runner, FID id) { Aver.Fail("====================================== As of 20210730 This test suite is no longer supported and needs to be completely re-written in Sky ==================================================== "); try { ProcessStartInfo start; if (Platform.Abstraction.PlatformAbstractionLayer.IsNetCore) { start = new ProcessStartInfo() { FileName = "dotnet", Arguments = "toy.dll wave -config toy-wave.laconf", RedirectStandardInput = true, UseShellExecute = false } } ; else { start = new ProcessStartInfo() { FileName = "toy", Arguments = "wave -config toy-wave.laconf", RedirectStandardInput = true, UseShellExecute = false } }; m_ServerProcess = new Process() { StartInfo = start }; m_ServerProcess.Start(); System.Threading.Thread.Sleep(TimeSpan.FromSeconds(2)); } catch (Exception) { Console.WriteLine("The test must be executed with admin priviledges!"); throw; } }
public void Prologue(Runner runner, FID id) { Console.ForegroundColor = ConsoleColor.Yellow; Console.WriteLine("-------------------------------------------"); Console.WriteLine("Run as Administrator or grant all users rights to http://localhost:9871"); Console.WriteLine("-------------------------------------------"); Console.ForegroundColor = ConsoleColor.White; Console.WriteLine(); m_Client = new HttpClient(); var config = typeof(ServerTestsBase).GetText("tests.laconf").AsLaconicConfig(handling: Data.ConvertErrorHandling.Throw); m_App = new AzosApplication(null, config); m_Server = new WaveServer(m_App); m_Server.Configure(null); m_Server.Start(); DoPrologue(runner, id); }
public void FID3() { var CNT = 0xffff * 2; for (var c = 0; c < 37; c++) { var set1 = new FID[CNT]; var set2 = new FID[CNT]; for (var i = 0; i < CNT; i++) { set1[i] = FID.Generate(); set2[i] = FID.Generate(); } Aver.IsFalse(set1.Intersect(set2).Any()); "{0}: Set of {1} FIDs no intersection".SeeArgs(c, CNT); } }
public void FID3() { var CNT = 500000; for(var c=0; c<100; c++) { var set1 = new FID[CNT]; var set2 = new FID[CNT]; for(var i=0; i<CNT; i++) { set1[i] = FID.Generate(); set2[i] = FID.Generate(); } Assert.IsFalse( set1.Intersect(set2).Any() ); Console.WriteLine("{0}: Set of {1} FIDs no intersection", c, CNT); } }
public void getKeyValuePairsTest(int count) { using (var test = new PrefixTree <int>(m_Pile)) { Console.WriteLine(DateTime.Now); for (int i = 0; i < count; i++) { test[FID.Generate().ToString()] = i; } Console.WriteLine(DateTime.Now); List <KeyValuePair <string, int> > keyValuePairs = new List <KeyValuePair <string, int> >(test.getKeyValuePairs()); Console.WriteLine(keyValuePairs.Count); Console.WriteLine(DateTime.Now); Console.WriteLine(new List <String>(test.Keys).Count); Console.WriteLine(DateTime.Now); } Console.WriteLine(m_Pile.ObjectCount); Console.WriteLine(DateTime.Now); }
bool IRunHook.Prologue(Runner runner, FID id, MethodInfo method, RunAttribute attr, ref object[] args) { TestImg1 = new Color[4, 8] { { G, B, R, B, B, R, B, G }, { G, B, B, B, B, B, B, G }, { G, B, R, B, B, R, B, G }, { G, G, B, R, R, B, G, G } }.ToImage(); TestImg2 = new Color[3, 3] { { G, B, R }, { G, B, B }, { G, G, G } }.ToImage(); return(false); }
protected override ResponseMsg DoDecodeResponse(WireFrame frame, MemoryStream ms) { var utf8 = ms.GetBuffer(); var json = Encoding.UTF8.GetString(utf8, (int)ms.Position, (int)ms.Length - (int)ms.Position); var data = json.JSONToDataObject() as JSONDataMap; if (data == null) { throw new ProtocolException(StringConsts.GLUE_BINDING_RESPONSE_ERROR.Args(nameof(AppTermBinding), "data==null")); } var reqID = new FID(data["request-id"].AsULong(handling: ConvertErrorHandling.Throw)); var instance = data["instance"].AsNullableGUID(handling: ConvertErrorHandling.Throw); object returnValue = data["return"]; if (returnValue == null || returnValue is string) { //return as-is } else if (returnValue is JSONDataMap map)//error or Remote Terminal { var errorContent = map["error-content"].AsString(); if (errorContent != null) { returnValue = WrappedExceptionData.FromBase64(errorContent); } else { returnValue = new Contracts.RemoteTerminalInfo(map); } } else { throw new ProtocolException(StringConsts.GLUE_BINDING_RESPONSE_ERROR.Args(nameof(AppTermBinding), "data.return is " + returnValue.GetType().FullName)); } var result = new ResponseMsg(reqID, instance, returnValue); return(result); }
void IRunnableHook.Prologue(Runner runner, FID id) { try { ProcessStartInfo start; if (PAL.PlatformAbstractionLayer.IsNetCore) { start = new ProcessStartInfo() { FileName = "dotnet", Arguments = "toy.dll wave -config toy-wave.laconf", RedirectStandardInput = true, UseShellExecute = false } } ; else { start = new ProcessStartInfo() { FileName = "toy", Arguments = "wave -config toy-wave.laconf", RedirectStandardInput = true, UseShellExecute = false } }; m_ServerProcess = new Process() { StartInfo = start }; m_ServerProcess.Start(); System.Threading.Thread.Sleep(TimeSpan.FromSeconds(2)); } catch (Exception) { Console.WriteLine("The test must be executed with admin priviledges!"); throw; } }
void IRunnableHook.Prologue(Runner runner, FID id) { var config = CONFIG.AsLaconicConfig(handling: ConvertErrorHandling.Throw); m_App = new AzosApplication(null, config); m_Daemon = new MessageDaemon(m_App); m_Daemon.Configure(null); m_Daemon.Start(); m_Sink = m_Daemon.Sink as TwilioSink; Aver.IsNotNull(m_Sink); Aver.IsTrue(m_Sink.Name.EqualsOrdIgnoreCase("Twilio")); Aver.IsTrue(m_Sink.SupportedChannels == MsgChannels.SMS); Aver.IsTrue(m_Sink.SupportedChannelNames.Contains("Twilio")); Aver.IsTrue(m_Sink.Running); }
void IRunnableHook.Prologue(Runner runner, FID id) { ProcessStartInfo start; if (Platform.Abstraction.PlatformAbstractionLayer.IsNetCore) { start = new ProcessStartInfo() { FileName = "dotnet", Arguments = "toy.dll -config toy-server.laconf", RedirectStandardInput = true, UseShellExecute = false } } ; else { start = new ProcessStartInfo() { FileName = "toy.exe", Arguments = "-config toy-server.laconf", RedirectStandardInput = true, UseShellExecute = false } }; m_ServerProcess = new Process() { StartInfo = start }; m_ServerProcess.Start(); System.Threading.Thread.Sleep(TimeSpan.FromSeconds(2)); } bool IRunnableHook.Epilogue(Runner runner, FID id, Exception error) { m_ServerProcess.StandardInput.WriteLine(string.Empty); return(false); }
public void BeginRunnable(Runner runner, FID id, object runnable) { m_TotalRunnables++; var t = runnable.GetType(); m_RunnableHeader = "Starting {0}::{1}.{2} ...".Args(t.Assembly.GetName().Name, t.Namespace, t.DisplayNameWithExpandedGenericArgs()); m_HadRunnableMethods = false; m_PriorMethodName = null; m_PriorMethodCount = 0; var o = m_Out?.Root; if (o != null) { m_RunnableNode = o.AddChildNode("runnable", runnable.GetType().Name); m_RunnableNode.AddAttributeNode("id", id); m_RunnableNode.AddAttributeNode("type", runnable.GetType().AssemblyQualifiedName); m_RunnableNode.AddAttributeNode("now-loc", App.LocalizedTime); m_RunnableNode.AddAttributeNode("now-utc", App.TimeSource.UTCNow); } }
public void Glue_SerializeDeserialize() { var frm1 = new WireFrame(123, false, FID.Generate()); Aver.AreEqual(WireFrame.FRAME_LENGTH, frm1.Length); var ms = new MemoryStream(); Aver.AreEqual(WireFrame.FRAME_LENGTH, frm1.Serialize(ms)); ms.Position = 0; var frm2 = new WireFrame(ms); Aver.IsTrue(frm1.Type == frm2.Type); Aver.AreEqual(frm1.RequestID, frm2.RequestID); Aver.AreEqual(frm1.OneWay, frm2.OneWay); Aver.AreEqual(frm1.Length, frm2.Length); Aver.AreEqual(frm1.Format, frm2.Format); Aver.AreEqual(frm1.HeadersContent, frm2.HeadersContent); Aver.IsFalse(frm2.OneWay); }
/// <summary> /// Constructs new message and allocates unique ID /// </summary> protected Msg() { m_ID = FID.Generate(); }
public abstract void Write(FID? value);
public ResponseMsg ServerHandleRequestFailure(FID reqID, bool oneWay, Exception failure, object bindingSpecCtx) { return null; }
public override void Write(FID? value) { if (value.HasValue) { this.Write(true); Write(value.Value); return; } this.Write(false); }
public override void Write(FID value) { m_Stream.WriteBEUInt64( value.ID ); }
/// <summary> /// Reconstruct (deserializes) frame from the stream. May throw on error /// </summary> public WireFrame(Stream stream) : this() { //MAGIC var magic = stream.ReadBEUShort(); if (magic != MAGIC) throw new ProtocolException( StringConsts.GLUE_BAD_PROTOCOL_FRAME_ERROR + "bag magic: expected '{0}' but got '{1}'".Args(MAGIC, magic)); //VERSION var ver = stream.ReadByte(); if (ver != VERSION) throw new ProtocolException( StringConsts.GLUE_BAD_PROTOCOL_FRAME_ERROR + "version mismatch: expected '{0}' but got '{1}'".Args(VERSION, ver)); //TYPE m_Type = (FrameType)stream.ReadByte(); //FORMAT m_Format = stream.ReadBEInt32(); //ONEWAY m_OneWay = stream.ReadByte() != 0; //REQUESTID m_RequestID = new FID( stream.ReadBEUInt64() ); //HEADERSCONTENT var len = stream.ReadBEInt32(); if (len>0) { if (len>MAX_HEADERS_BYTE_LENGTH) throw new ProtocolException( StringConsts.GLUE_BAD_PROTOCOL_FRAME_ERROR + "arrived headers length of {0} bytes exceeds the limit of {1} bytes".Args(len, MAX_HEADERS_BYTE_LENGTH)); m_HeadersContentLength = len; var hbuf = new byte[len]; stream.Read(hbuf, 0, len); m_HeadersContent = HEADERS_ENCODING.GetString( hbuf ); } m_Length = FRAME_LENGTH + m_HeadersContentLength; }
public WireFrame(FrameType type, int format, bool oneWay, FID reqID, string headersContent = null) : this() { m_Type = type; m_Format = format; m_OneWay = type==FrameType.GlueMsg ? oneWay : type!=FrameType.Echo; m_RequestID = reqID; m_HeadersContent = headersContent; m_HeadersContentLength = string.IsNullOrWhiteSpace(headersContent)? 0 : HEADERS_ENCODING.GetByteCount( headersContent ); m_Length = FRAME_LENGTH + m_HeadersContentLength; if (m_HeadersContentLength>MAX_HEADERS_BYTE_LENGTH) throw new ProtocolException( StringConsts.GLUE_BAD_PROTOCOL_FRAME_ERROR + "created headers length of {0} bytes exceeds the limit of {1} bytes" .Args(m_HeadersContentLength, MAX_HEADERS_BYTE_LENGTH)); }
public WireFrame(int format, bool oneWay, FID reqID, string headersContent = null) : this(FrameType.GlueMsg, format, oneWay, reqID, headersContent) { }
public void FID4(int CNT, int tCNT) { var tasks = new List<Task>(); var sets= new List<FID>(); var bag = new ConcurrentBag<FID[]>(); for(var c=0; c<tCNT; c++) { tasks.Add( Task.Factory.StartNew(()=> { var set = new FID[CNT]; for(var i=0; i<CNT; i++) { set[i] = FID.Generate(); } bag.Add( set ); })); } Task.WaitAll( tasks.ToArray() ); foreach(var set in bag) sets.AddRange( set ); Console.WriteLine("Analyzing {0:n} FIDs", sets.Count); Assert.IsTrue( sets.AsParallel().Distinct().Count() == sets.Count() ); Console.WriteLine("Done. All ok"); }
public ResponseMsg(FID requestID, object returnValue) : this(requestID, null, returnValue) {}
/// <summary> /// Handles request synchronously in the context of the calling thread. Returns NULL for one-way calls /// </summary> public ResponseMsg HandleRequestFailure(FID reqID, bool oneWay, Exception failure, object bindingSpecCtx) { if (oneWay) return null; var red = new RemoteExceptionData(failure); var response = new ResponseMsg(reqID, red); response.__SetBindingSpecificContext(bindingSpecCtx); return response; }