internal CallerChainImpl(AnyCredential anyCredential)
     : this()
 {
     Legacy = anyCredential.Legacy;
     if (Legacy)
     {
         core.v2_0.services.access_control.CallChain legacyChain = UnmarshalLegacyCallChain(anyCredential.LegacyChain);
         BusId       = anyCredential.Bus;
         Target      = legacyChain.target;
         Originators = new LoginInfo[legacyChain.originators.Length];
         for (int i = 0; i < legacyChain.originators.Length; i++)
         {
             Originators[i] = new LoginInfo(legacyChain.originators[i].id, legacyChain.originators[i].entity);
         }
         Caller = new LoginInfo(legacyChain.caller.id, legacyChain.caller.entity);
         Signed = new AnySignedChain(anyCredential.LegacyChain);
     }
     else
     {
         CallChain chain = UnmarshalCallChain(anyCredential.Chain);
         BusId       = chain.bus;
         Target      = chain.target;
         Originators = chain.originators;
         Caller      = chain.caller;
         Signed      = new AnySignedChain(anyCredential.Chain);
     }
 }
 public void Setup()
 {
     var info = new TestRunInformation();
     info.Name = "TESTNAME";
     var chain = new CallChain("TestRoot", "TestRootR", 1);
     chain.StartTime = 0;
     chain.EndTime = 10;
     var c = new CallChain("TestChild1", "TestChild1R", 2);
     c.StartTime = 1;
     c.EndTime = 2;
     chain.AddChild(c);
     var c2 = new CallChain("TestChild2", "TestChild2R", 3);
     c2.StartTime = 3;
     c2.EndTime = 9;
     chain.AddChild(c2);
     var child = new CallChain("TestChild3", "TestChild3R", 4);
     child.StartTime = 4;
     child.EndTime = 8;
     var grandchild = new CallChain("TestGrandChild", "TestGrandChildR", 5);
     grandchild.StartTime = 5;
     grandchild.EndTime = 7;
     child.AddChild(grandchild);
     chain.AddChild(child);
     info.TestChain = chain;
     projection = new CouplingCountAndNameProjection();
     projection.Index(info);
 }
Example #3
0
        public CalledFunctionAnalysisUnit(IVersioned agg, FunctionAnalysisUnit originalUnit, CallChain callChain, ArgumentSet callArgs)
            : base(originalUnit.Function, originalUnit._declUnit)
        {
            _originalUnit = originalUnit;
            _agg          = agg;
            CallChain     = callChain;

            var scope = new FunctionScope(
                Function,
                Ast,
                originalUnit.Scope.OuterScope,
                originalUnit.DeclaringModule.ProjectEntry
                );

            scope.UpdateParameters(this, callArgs, false, originalUnit.Scope as FunctionScope);
            _scope = scope;

            var walker = new OverviewWalker(_originalUnit.ProjectEntry, this, Tree);

            if (Ast.Body != null)
            {
                Ast.Body.Walk(walker);
            }

            AnalysisLog.NewUnit(this);
            Enqueue();
        }
        public CallerChain MakeChainFor(string entity)
        {
            ConnectionImpl conn = (ConnectionImpl)GetCurrentConnection();

            if (conn == null)
            {
                Logger.Error("Não há conexão para executar a chamada MakeChainFor.");
                throw new NO_PERMISSION(NoLoginCode.ConstVal, CompletionStatus.Completed_No);
            }
            LoginInfo?myLogin = conn.Login;

            if (!myLogin.HasValue)
            {
                Logger.Error("Não há login para executar a chamada MakeChainFor.");
                throw new NO_PERMISSION(NoLoginCode.ConstVal, CompletionStatus.Completed_No);
            }

            try {
                AccessControl acs         = conn.Acs;
                SignedData    signedChain = acs.signChainFor(entity);
                CallChain     callChain   = CallerChainImpl.UnmarshalCallChain(signedChain);
                if (conn.Legacy)
                {
                    SignedCallChain legacySigned = conn.LegacyConverter.signChainFor(entity);
                    return(new CallerChainImpl(callChain.bus, callChain.caller, callChain.target,
                                               callChain.originators, signedChain, legacySigned));
                }
                return(new CallerChainImpl(callChain.bus, callChain.caller, callChain.target,
                                           callChain.originators, signedChain));
            }
            catch (GenericUserException e) {
                Logger.Error("Falha inesperada ao criar uma nova cadeia.", e);
                throw;
            }
        }
        public void Setup()
        {
            var info = new TestRunInformation();

            info.Name = "TESTNAME";
            var chain = new CallChain("TestRoot", "TestRootR", 1);

            chain.StartTime = 0;
            chain.EndTime   = 10;
            var c = new CallChain("TestChild1", "TestChild1R", 2);

            c.StartTime = 1;
            c.EndTime   = 2;
            chain.AddChild(c);
            var c2 = new CallChain("TestChild2", "TestChild2R", 3);

            c2.StartTime = 3;
            c2.EndTime   = 9;
            chain.AddChild(c2);
            var child = new CallChain("TestChild3", "TestChild3R", 4);

            child.StartTime = 4;
            child.EndTime   = 8;
            var grandchild = new CallChain("TestGrandChild", "TestGrandChildR", 5);

            grandchild.StartTime = 5;
            grandchild.EndTime   = 7;
            child.AddChild(grandchild);
            chain.AddChild(child);
            info.TestChain = chain;
            projection     = new CouplingCountAndNameProjection();
            projection.Index(info);
        }
Example #6
0
        public static CallChain BuildChainWithPrefix(string prefix)
        {
            var chain = new CallChain(prefix + "Root", prefix + "RootR", 1)
            {
                StartTime = 0, EndTime = 10
            };

            chain.AddChild(new CallChain(prefix + "Child1", prefix + "Child1R", 2)
            {
                StartTime = 1, EndTime = 2
            });
            chain.AddChild(new CallChain(prefix + "Child2", prefix + "Child2R", 3)
            {
                StartTime = 2, EndTime = 3
            });
            var child = new CallChain(prefix + "Child3", prefix + "Child3R", 4)
            {
                StartTime = 4, EndTime = 7
            };

            child.AddChild(new CallChain(prefix + "GrandChild", prefix + "GrandChildR", 5)
            {
                StartTime = 5, EndTime = 6
            });
            chain.AddChild(child);
            return(chain);
        }
 public CallerChain DecodeChain(byte[] encoded)
 {
     try {
         VersionedData[] versions = DecodeExportedVersions(encoded,
                                                           _magicTagCallChain);
         CallerChainImpl decodedChain = null;
         for (int i = 0; i < versions.Length; i++)
         {
             // Se houver duas versões, a versão atual virá antes da versão legacy.
             if (versions[i].version == ExportVersion.ConstVal)
             {
                 TypeCode signedDataTypeCode =
                     ORB.create_tc_for_type(typeof(SignedData));
                 SignedData exportedChain =
                     (SignedData)
                     _codec.decode_value(versions[i].encoded, signedDataTypeCode);
                 CallChain chain = CallerChainImpl.UnmarshalCallChain(exportedChain);
                 if (decodedChain == null)
                 {
                     decodedChain = new CallerChainImpl(chain.bus, chain.caller,
                                                        chain.target, chain.originators, exportedChain);
                 }
                 else
                 {
                     decodedChain.Signed.Chain = exportedChain;
                 }
             }
             if (versions[i].version == CurrentVersion.ConstVal)
             {
                 TypeCode exportedChainTypeCode =
                     ORB.create_tc_for_type(typeof(ExportedCallChain));
                 ExportedCallChain exportedChain =
                     (ExportedCallChain)
                     _codec.decode_value(versions[i].encoded, exportedChainTypeCode);
                 core.v2_0.services.access_control.CallChain chain =
                     CallerChainImpl.UnmarshalLegacyCallChain(exportedChain.signedChain);
                 if (decodedChain == null)
                 {
                     decodedChain = new CallerChainImpl(exportedChain.bus, chain.caller,
                                                        chain.target, chain.originators, exportedChain.signedChain);
                 }
                 else
                 {
                     decodedChain.Signed.LegacyChain = exportedChain.signedChain;
                 }
             }
         }
         if (decodedChain != null)
         {
             return(decodedChain);
         }
     }
     catch (GenericUserException e) {
         const string message =
             "Falha inesperada ao decodificar uma cadeia exportada.";
         Logger.Error(message, e);
         throw new InvalidEncodedStreamException(message, e);
     }
     throw new InvalidEncodedStreamException("Versão de cadeia incompatível.");
 }
        public CallerChain ImportChain(byte[] token, string domain)
        {
            ConnectionImpl conn = (ConnectionImpl)GetCurrentConnection();

            if (conn == null)
            {
                throw new NO_PERMISSION(NoLoginCode.ConstVal, CompletionStatus.Completed_No);
            }
            AccessControl          acs    = conn.Acs;
            AsymmetricKeyParameter busKey = conn.BusKey;

            if (busKey == null)
            {
                throw new NO_PERMISSION(NoLoginCode.ConstVal, CompletionStatus.Completed_No);
            }
            byte[]     encryptedToken = Crypto.Encrypt(busKey, token);
            SignedData signedChain    = acs.signChainByToken(encryptedToken, domain);

            try {
                CallChain callChain = CallerChainImpl.UnmarshalCallChain(signedChain);
                return(new CallerChainImpl(callChain.bus, callChain.caller, callChain.target,
                                           callChain.originators, signedChain));
            }
            catch (GenericUserException e) {
                const string message = "Falha inesperada ao importar uma nova cadeia.";
                Logger.Error(message, e);
                throw new OpenBusInternalException(message, e);
            }
        }
Example #9
0
        public void ProcessNewEntry(CallChain c)
        {
            _timesCalled++;
            var timeunder = c.EndTime - c.StartTime;

            _totalTimeUnder += timeunder;
            if (timeunder > _maxTimeUnder)
            {
                _maxTimeUnder = timeunder;
            }
            if (timeunder < _minTimeUnder)
            {
                _minTimeUnder = timeunder;
            }
            var time = timeunder - GetChildrenTime(c);

            if (time > _maxTime)
            {
                _maxTime = time;
            }
            if (time < _minTime)
            {
                _minTime = time;
            }
            _totalTime += time;
        }
Example #10
0
        public FunctionAnalysisUnit(FunctionAnalysisUnit originalUnit, CallChain callChain, ArgumentSet callArgs)
            : base(originalUnit.Ast, null) {
            _originalUnit = originalUnit;
            _declUnit = originalUnit._declUnit;
            Function = originalUnit.Function;

            CallChain = callChain;

            var scope = new FunctionScope(
                Function,
                Ast,
                originalUnit.Scope.OuterScope,
                originalUnit.DeclaringModule.ProjectEntry
            );
            scope.UpdateParameters(this, callArgs, false, originalUnit.Scope as FunctionScope);
            _scope = scope;

            var walker = new OverviewWalker(_originalUnit.ProjectEntry, this, Tree);
            if (Ast.Body != null) {
                Ast.Body.Walk(walker);
            }

            AnalysisLog.NewUnit(this);
            Enqueue();
        }
Example #11
0
 private int GetDepth(CallChain testChain)
 {
     if (testChain == null || testChain.Children == null || testChain.Children.Count == 0)
     {
         return(0);
     }
     return(GetDepth(testChain.Children[0]) + 1);
 }
Example #12
0
 public static CallChain BuildChainWithPrefix(string prefix)
 {
     var chain = new CallChain(prefix + "Root", prefix + "RootR", 1) { StartTime=0,EndTime=10};
     chain.AddChild(new CallChain(prefix + "Child1", prefix + "Child1R", 2) { StartTime = 1, EndTime = 2 });
     chain.AddChild(new CallChain(prefix + "Child2", prefix + "Child2R", 3) { StartTime = 2, EndTime = 3 });
     var child = new CallChain(prefix + "Child3", prefix + "Child3R", 4) { StartTime = 4, EndTime = 7 };
     child.AddChild(new CallChain(prefix + "GrandChild", prefix + "GrandChildR", 5) { StartTime = 5, EndTime = 6 });
     chain.AddChild(child);
     return chain;
 }
 public void RemoveEntry(CallChain c)
 {
     _timesCalled--;
     if (_timesCalled < 0) _timesCalled = 0;
     var timeunder = c.EndTime - c.StartTime;
     _totalTimeUnder -= timeunder;
     if (_totalTimeUnder < 0) _totalTimeUnder = 0;
     var time = timeunder - GetChildrenTime(c);
     _totalTime -= time;
     if (_totalTime < 0) _totalTime = 0;
 }
 private double GetChildrenTime(CallChain c)
 {
     double ret = 0;
     if(c.Children != null && c.Children.Count > 0) {
         foreach (var child in c.Children)
         {
             if (child.Name == c.Name) continue;
             ret += child.EndTime - child.StartTime;
         }
     }
     return ret;
 }
 public void ProcessNewEntry(CallChain c)
 {
     _timesCalled++;
     var timeunder = c.EndTime - c.StartTime;
     _totalTimeUnder += timeunder;
     if (timeunder > _maxTimeUnder) _maxTimeUnder = timeunder;
     if (timeunder < _minTimeUnder) _minTimeUnder = timeunder;
     var time = timeunder - GetChildrenTime(c);
     if (time > _maxTime) _maxTime = time;
     if (time < _minTime) _minTime = time; 
     _totalTime += time;
 }
Example #16
0
 private static void WriteChainItem(BinaryWriter writer, CallChain chain)
 {
     writer.Write((string)chain.Name);
     //writer.Write((string)chain.Runtime);
     writer.Write((Int64)chain.FunctionId);
     writer.Write((int)chain.Children.Count);
     writer.Write((double)chain.StartTime);
     writer.Write((double)chain.EndTime);
     foreach (var child in chain.Children)
     {
         WriteChainItem(writer, child);
     }
 }
 public void SetUp()
 {
     var chain = new CallChain("Root", "RootR", 1);
     var c = new CallChain("Child1", "Child1R", 2);
     c.AddChild(new CallChain("GrandChild", "GrandChildR", 17));
     chain.AddChild(c);
     chain.AddChild(new CallChain("Child2", "Child2R", 3));
     var child = new CallChain("Child3",  "Child3R", 4);
     child.AddChild(new CallChain("GrandChild","GrandChildR", 5));
     chain.AddChild(child);
     var information = new TestRunInformation {Name = "test", TestChain = chain};
     _paths = PathFinder.FindPathsTo(information, "GrandChild").ToList();
 }
Example #18
0
        internal FunctionClosureAnalysisUnit(IVersioned agg, FunctionAnalysisUnit originalUnit, CallChain callChain) :
            base(originalUnit.Function, originalUnit._declUnit, originalUnit._declUnit.Scope, originalUnit.ProjectEntry, true)
        {
            _originalUnit = originalUnit;
            _agg          = agg;
            CallChain     = callChain;
            _originalUnit.Scope.AddLinkedScope(Scope);

            var node = originalUnit.Function.FunctionDefinition;

            node.Body.Walk(new OverviewWalker(originalUnit.ProjectEntry, this, originalUnit.Tree));

            AnalysisLog.NewUnit(this);
        }
        private static Chain BuildChain(CallChain callChain, bool isSetup, bool isTest, bool isTeardown)
        {
            var chain = new Chain(callChain.Runtime, callChain.Name);

            chain.IsSetup    = isSetup;
            chain.IsTest     = isTest;
            chain.IsTeardown = isTeardown;
            chain.TimeStart  = callChain.StartTime;
            chain.TimeEnd    = callChain.EndTime;
            foreach (var child in callChain.Children)
            {
                chain.Children.Add(BuildChain(child, false, false, false));
            }
            return(chain);
        }
Example #20
0
        private double GetChildrenTime(CallChain c)
        {
            double ret = 0;

            if (c.Children != null && c.Children.Count > 0)
            {
                foreach (var child in c.Children)
                {
                    if (child.Name == c.Name)
                    {
                        continue;
                    }
                    ret += child.EndTime - child.StartTime;
                }
            }
            return(ret);
        }
        public void SetUp()
        {
            var chain = new CallChain("Root", "RootR", 1);
            var c     = new CallChain("Child1", "Child1R", 2);

            c.AddChild(new CallChain("GrandChild", "GrandChildR", 17));
            chain.AddChild(c);
            chain.AddChild(new CallChain("Child2", "Child2R", 3));
            var child = new CallChain("Child3", "Child3R", 4);

            child.AddChild(new CallChain("GrandChild", "GrandChildR", 5));
            chain.AddChild(child);
            var information = new TestRunInformation {
                Name = "test", TestChain = chain
            };

            _paths = PathFinder.FindPathsTo(information, "GrandChild").ToList();
        }
Example #22
0
        public void can_calulate_total_time_properly_for_single_item_with_single_child()
        {
            var count = new CountsAndTimes();
            var chain = new CallChain("TEST", "TESTR", 1)
            {
                StartTime = 0, EndTime = 10
            };

            chain.Children.Add(new CallChain("TEST1", "TESTR", 3)
            {
                StartTime = 3, EndTime = 5
            });
            count.ProcessNewEntry(chain);
            Assert.AreEqual(8, count.TotalTime);
            Assert.AreEqual(8, count.MaxTime);
            Assert.AreEqual(8, count.MinTime);
            Assert.AreEqual(8, count.AverageTime);
        }
Example #23
0
        private static CallChain ReadChainItem(BinaryReader reader)
        {
            var name = string.Intern(reader.ReadString());
            //var runtime = reader.ReadString();
            var functionId = reader.ReadInt64();

            var item = new CallChain(name, "", functionId);

            var count = reader.ReadInt32();
            var start = reader.ReadDouble();
            var end   = reader.ReadDouble();

            item.StartTime = start;
            item.EndTime   = end;
            for (int i = 0; i < count; i++)
            {
                item.AddChild(ReadChainItem(reader));
            }
            return(item);
        }
Example #24
0
        public void does_not_include_children_that_are_itself_when_counting_with_multiple_children()
        {
            var count = new CountsAndTimes();
            var chain = new CallChain("TEST", "TESTR", 3)
            {
                StartTime = 0, EndTime = 10
            };

            chain.Children.Add(new CallChain("TEST", "TESTR", 3)
            {
                StartTime = 3, EndTime = 5
            });
            chain.Children.Add(new CallChain("TEST1", "TESTR", 3)
            {
                StartTime = 5, EndTime = 7
            });
            count.ProcessNewEntry(chain);
            Assert.AreEqual(8, count.TotalTime);
            Assert.AreEqual(8, count.MaxTime);
            Assert.AreEqual(8, count.MinTime);
            Assert.AreEqual(8, count.AverageTime);
        }
Example #25
0
        public void RemoveEntry(CallChain c)
        {
            _timesCalled--;
            if (_timesCalled < 0)
            {
                _timesCalled = 0;
            }
            var timeunder = c.EndTime - c.StartTime;

            _totalTimeUnder -= timeunder;
            if (_totalTimeUnder < 0)
            {
                _totalTimeUnder = 0;
            }
            var time = timeunder - GetChildrenTime(c);

            _totalTime -= time;
            if (_totalTime < 0)
            {
                _totalTime = 0;
            }
        }
Example #26
0
     /// <summary>
     /// Performs all necessary queries to determine whether any violations were found, returning all violation objects as <see cref="CommandLineViolation"/>.
     /// </summary>
     /// <returns>
     /// Returns a collection of <see cref="CommandLineViolation"/> representing the violations, if any violations where found.
     /// Returns an empty collection if no violations were found.
     /// </returns>
     public override IEnumerable <CommandLineViolation> GetViolations()
     {
         if (CommandLine.Arguments.Any() && CallChain.Found(CmdLineSearchOptions.None))
         {
             int paramCount = CallChain.GetParams().Count();
             if (paramCount < MinParamsAllowed)
             {
                 yield return new CommandLineViolation()
                        {
                            Violation = nameof(ParameterCountRestriction), Message = string.Join(" ", CallChain.Select(icla => icla.Command))
                        }
             }
             ;
             else if (paramCount > MaxParamsAllowed)
             {
                 yield return new CommandLineViolation()
                        {
                            Violation = nameof(ParameterCountRestriction), Message = string.Join(" ", CallChain.Select(icla => icla.Command))
                        }
             }
             ;
         }
     }
 }
Example #27
0
        public override INamespaceSet Call(Node node, AnalysisUnit unit, INamespaceSet[] args, NameExpression[] keywordArgNames)
        {
            var callArgs = ArgumentSet.FromArgs(FunctionDefinition, unit, args, keywordArgNames);

            if (_allCalls == null) {
                _allCalls = new Dictionary<CallChain, FunctionAnalysisUnit>();
            }

            FunctionAnalysisUnit calledUnit;
            bool updateArguments = true;

            if (callArgs.Count == 0 || (ProjectState.Limits.UnifyCallsToNew && Name == "__new__")) {
                calledUnit = (FunctionAnalysisUnit)AnalysisUnit;
            } else {
                var chain = new CallChain(node, unit, unit.ProjectState.Limits.CallDepth);
                if (!_allCalls.TryGetValue(chain, out calledUnit)) {
                    if (unit.ForEval) {
                        // Call expressions that weren't analyzed get the union result
                        // of all calls to this function.
                        var res = NamespaceSet.Empty;
                        foreach (var call in _allCalls.Values) {
                            res = res.Union(call.ReturnValue.TypesNoCopy);
                        }
                        return res;
                    } else {
                        _allCalls[chain] = calledUnit = new FunctionAnalysisUnit((FunctionAnalysisUnit)AnalysisUnit, chain, callArgs);
                        updateArguments = false;
                    }
                }
            }

            if (updateArguments && calledUnit.UpdateParameters(callArgs)) {
            #if DEBUG
                // Checks whether these arguments can be added ad nauseum.
                if (calledUnit.UpdateParameters(callArgs) && calledUnit.UpdateParameters(callArgs) && calledUnit.UpdateParameters(callArgs)) {
                    AnalysisLog.Add("BadArgs", calledUnit, callArgs);
                }
            #endif
                AnalysisLog.UpdateUnit(calledUnit);
            }

            calledUnit.ReturnValue.AddDependency(unit);
            return calledUnit.ReturnValue.Types;
        }
 private int GetDepth(CallChain testChain)
 {
     if (testChain == null || testChain.Children == null || testChain.Children.Count == 0) return 0;
     return GetDepth(testChain.Children[0]) + 1;
 }
        private static CallChain ReadChainItem(BinaryReader reader)
        {
            var name = string.Intern(reader.ReadString());
            //var runtime = reader.ReadString();
            var functionId = reader.ReadInt64();

            var item = new CallChain(name, "", functionId);
            
            var count = reader.ReadInt32();
            var start = reader.ReadDouble();
            var end = reader.ReadDouble();
            item.StartTime = start;
            item.EndTime = end; 
            for (int i = 0; i < count; i++)
            {
                item.AddChild(ReadChainItem(reader));
            }
            return item;
        }
 private static void WriteChainItem(BinaryWriter writer, CallChain chain)
 {
     writer.Write((string) chain.Name);
     //writer.Write((string)chain.Runtime);
     writer.Write((Int64) chain.FunctionId);
     writer.Write((int) chain.Children.Count);
     writer.Write((double)chain.StartTime);
     writer.Write((double)chain.EndTime);
     foreach(var child in chain.Children)
     {
         WriteChainItem(writer, child);
     }
 }