internal static LambdaSpan CreateRootSpan(string operationName, DateTimeOffset timestamp, IDictionary <string, object> tags, string guid, ILogger logger = null, IFileSystemManager fileSystemManager = null)
        {
            if (logger == null)
            {
                logger = new MockLogger();
            }

            if (fileSystemManager == null)
            {
                fileSystemManager = new MockFileSystemManager();
            }

            var rootSpan = new LambdaRootSpan(operationName, timestamp, tags, guid, new DataCollector(logger, false, fileSystemManager), new TransactionState(), new PrioritySamplingState(), new DistributedTracingState());
            LambdaSpanContext context = new LambdaSpanContext(rootSpan);

            rootSpan.SetContext(context);
            return(rootSpan);
        }
        public void DoesWriteDataToNamedPipe()
        {
            var fileSystemManager = new MockFileSystemManager();

            fileSystemManager.PathExists = true;

            var startTime = DateTimeOffset.UtcNow;
            var span      = TestUtil.CreateRootSpan("operationName", startTime, new Dictionary <string, object>(), "testGuid", fileSystemManager: fileSystemManager);

            span.RootSpan.PrioritySamplingState.Sampled = true;

            span.Finish();

            var deserializedPayload = JsonConvert.DeserializeObject <object[]>(fileSystemManager.FileContents);
            var data = TestUtil.DecodeAndDecompressNewRelicPayload(deserializedPayload[3] as string);

            Assert.IsTrue(fileSystemManager.FileContents.Contains("NR_LAMBDA_MONITORING"));
            Assert.IsTrue(data.Contains("analytic_event_data"));
            Assert.IsTrue(data.Contains("span_event_data"));
        }