Ejemplo n.º 1
0
        public void DiagnosticTracerRaisesEventsOnError()
        {
            var containerBuilder = new ContainerBuilder();

            containerBuilder.Register <string>(ctxt => throw new InvalidOperationException());
            var container = containerBuilder.Build();

            var tracer = new DotDiagnosticTracer();

            container.SubscribeToDiagnostics(tracer);
            string lastOpResult = null;

            tracer.OperationCompleted += (sender, args) =>
            {
                Assert.Same(tracer, sender);
                lastOpResult = args.TraceContent;
            };

            try
            {
                container.Resolve <string>();
            }
            catch
            {
            }

            Assert.Contains(nameof(InvalidOperationException), lastOpResult);
            Assert.StartsWith("digraph G {", lastOpResult);
            Assert.EndsWith("}", lastOpResult.Trim());
        }
Ejemplo n.º 2
0
        public void DiagnosticTracerDoesNotLeakMemory()
        {
            var containerBuilder = new ContainerBuilder();

            containerBuilder.RegisterType <Implementor>().As <IService>();
            containerBuilder.RegisterDecorator <Decorator, IService>();
            var container = containerBuilder.Build();

            var tracer = new DotDiagnosticTracer();

            container.SubscribeToDiagnostics(tracer);
            container.Resolve <IService>();

            // The dictionary of tracked operations and
            // graphs should be empty.
            Assert.Equal(0, tracer.OperationsInProgress);
        }
Ejemplo n.º 3
0
        public DIConfig(string functionName)
        {
            var tracer = new DotDiagnosticTracer();

            tracer.OperationCompleted += (sender, args) =>
            {
                // Writing the DOT trace to a file will let you render
                // it to a graph with Graphviz later, but this is
                // NOT A GOOD COPY/PASTE EXAMPLE. You'll want to do
                // things in an async fashion with good error handling.
                var path = Path.Combine(Path.GetTempPath(), $"{Guid.NewGuid()}.dot");
                using var file = new StreamWriter(path);
                file.WriteLine(args.TraceContent);
            };
            DependencyInjection.Initialize(builder =>
            {
                builder.RegisterType <Greeter>().As <IGreeter>();
            }, functionName, c => c.SubscribeToDiagnostics(tracer));
        }
Ejemplo n.º 4
0
        public void LabelPosition()
        {
            using var container = BuildGraphContainer();

            var    tracer = new DotDiagnosticTracer();
            string result = null;

            tracer.OperationCompleted += (sender, args) =>
            {
                result = args.TraceContent;
            };
            container.SubscribeToDiagnostics(tracer);

            using var scope = container.BeginLifetimeScope();
            scope.Resolve <IHandler <string> >();

            // Label should be at the top.
            Assert.Contains("labelloc=t", result);
        }
Ejemplo n.º 5
0
        public void GeneratesComplexGraph()
        {
            using var container = BuildGraphContainer();

            var    tracer = new DotDiagnosticTracer();
            string result = null;

            tracer.OperationCompleted += (sender, args) =>
            {
                result = args.TraceContent;
                _output.WriteLine(result);
            };
            container.SubscribeToDiagnostics(tracer);

            using var scope = container.BeginLifetimeScope();
            scope.Resolve <IHandler <string> >();

            Assert.NotNull(result);
        }
Ejemplo n.º 6
0
        public void DiagnosticTracerHandlesDecorators()
        {
            var containerBuilder = new ContainerBuilder();

            containerBuilder.RegisterType <Implementor>().As <IService>();
            containerBuilder.RegisterDecorator <Decorator, IService>();
            var container = containerBuilder.Build();

            var tracer = new DotDiagnosticTracer();

            container.SubscribeToDiagnostics(tracer);
            string lastOpResult = null;

            tracer.OperationCompleted += (sender, args) =>
            {
                Assert.Same(tracer, sender);
                lastOpResult = args.TraceContent;
            };

            container.Resolve <IService>();

            Assert.Contains("Decorator", lastOpResult);
        }
Ejemplo n.º 7
0
        public void TypeNamesArePrettyPrinted()
        {
            using var container = BuildGraphContainer();

            var    tracer = new DotDiagnosticTracer();
            string result = null;

            tracer.OperationCompleted += (sender, args) =>
            {
                result = args.TraceContent;
            };
            container.SubscribeToDiagnostics(tracer);

            using var scope = container.BeginLifetimeScope();
            scope.Resolve <IHandler <string> >();

            // Label should be pretty-printed.
            Assert.Contains("label=<Autofac.Diagnostics.DotGraph.Test.ComplexGraphTests.IHandler&lt;string&gt;", result);

            // No raw type names.
            Assert.DoesNotContain("`1", result);
            Assert.DoesNotContain("Culture=neutral", result);
        }
Ejemplo n.º 8
0
        public void DiagnosticTracerRaisesEventsOnSuccess()
        {
            var containerBuilder = new ContainerBuilder();

            containerBuilder.Register(ctxt => "Hello");
            var container = containerBuilder.Build();

            var tracer = new DotDiagnosticTracer();

            container.SubscribeToDiagnostics(tracer);
            string lastOpResult = null;

            tracer.OperationCompleted += (sender, args) =>
            {
                Assert.Same(tracer, sender);
                lastOpResult = args.TraceContent;
            };

            container.Resolve <string>();

            Assert.Contains("λ:string", lastOpResult);
            Assert.StartsWith("digraph G {", lastOpResult);
            Assert.EndsWith("}", lastOpResult.Trim());
        }