Example #1
0
        /// <summary>
        /// Initializes a new instance of the <see cref="RollbarClient" /> class.
        /// </summary>
        /// <param name="rollbarLogger">The rollbar logger.</param>
        public RollbarClient(RollbarLogger rollbarLogger)
            : this(rollbarLogger.Config)
        {
            Assumption.AssertNotNull(rollbarLogger, nameof(rollbarLogger));

            this._rollbarLogger = rollbarLogger;

            this._payloadTruncationStrategy = new IterativeTruncationStrategy();
            this._payloadScrubber           = new RollbarPayloadScrubber(this._rollbarLogger.Config.GetFieldsToScrub());
        }
        public void TestBasicPayloadScrubbing()
        {
            string initialPayload =
                "{\"access_token\":\"17965fa5041749b6bf7095a190001ded\",\"data\":{\"environment\":\"_Rollbar - unit - tests\",\"body\":{\"message\":{\"body\":\"Via log4net\"}},\"level\":\"info\",\"timestamp\":1555443532,\"platform\":\"Microsoft Windows 10.0.17763 \",\"language\":\"c#\",\"framework\":\".NETCoreApp,Version=v2.1\",\"custom\":{\"log4net\":{\"LoggerName\":\"RollbarAppenderFixture\",\"Level\":{\"Name\":\"INFO\",\"Value\":40000,\"DisplayName\":\"INFO\"},\"Message\":\"Via log4net\",\"ThreadName\":\"3\",\"TimeStamp\":\"2019-04-16T12:38:49.0503367-07:00\",\"LocationInfo\":null,\"UserName\":\"NOT AVAILABLE\",\"Identity\":\"NOT AVAILABLE\",\"ExceptionString\":\"\",\"Domain\":\"NOT AVAILABLE\",\"Properties\":{\"log4net:UserName\":\"NOT AVAILABLE\",\"log4net:HostName\":\"wscdellwin\",\"log4net:Identity\":\"NOT AVAILABLE\"},\"TimeStampUtc\":\"2019-04-16T19:38:49.0503367Z\"}},\"uuid\":\"25f57cce37654291a1ea517fb5dfb255\",\"notifier\":{\"name\":\"Rollbar.NET\",\"version\":\"3.0.6\"}}}";

            RollbarPayloadScrubber scrubber;

            // scrubbing by names only:
            string[] scrubFields = new string[]
            {
                "log4net:UserName",
                "log4net:HostName",
                "log4net:Identity",
            };
            scrubber = new RollbarPayloadScrubber(scrubFields);
            Assert.IsFalse(initialPayload.Contains("***"));
            string scrubbedPayload_byName = scrubber.ScrubPayload(initialPayload);

            Assert.IsTrue(scrubbedPayload_byName.Contains("***"));
            Assert.IsTrue(scrubbedPayload_byName.Contains("\"log4net:UserName\": \"***\""));
            Assert.IsTrue(scrubbedPayload_byName.Contains("\"log4net:HostName\": \"***\""));
            Assert.IsTrue(scrubbedPayload_byName.Contains("\"log4net:Identity\": \"***\""));

            // scrubbing by path only:
            string[] scrubPaths = new string[]
            {
                "data.body.message.body",
                "data.level",
            };
            scrubber = new RollbarPayloadScrubber(scrubPaths);
            string scrubbedPayload_byPath = scrubber.ScrubPayload(scrubbedPayload_byName);

            Assert.IsTrue(scrubbedPayload_byPath.Contains("\"body\": \"***\""));
            Assert.IsTrue(scrubbedPayload_byPath.Contains("\"level\": \"***\""));

            // scrubbing by names and by paths:
            List <string> combinedScrubTargets = new List <string>(scrubFields.Length + scrubPaths.Length);

            combinedScrubTargets.AddRange(scrubFields);
            combinedScrubTargets.AddRange(scrubPaths);
            scrubber = new RollbarPayloadScrubber(combinedScrubTargets);
            string scrubbedPayload = scrubber.ScrubPayload(initialPayload);

            Assert.AreEqual(scrubbedPayload, scrubbedPayload_byPath);

            //let's test when scrubbed twice:
            scrubbedPayload = scrubber.ScrubPayload(scrubbedPayload);
            Assert.AreEqual(scrubbedPayload, scrubbedPayload_byPath);
        }
        public void FilterOutCriticalFieldsTest()
        {
            var inputFileds = new string[]
            {
                "noncritical1",
                "critical1",
                "noncritical2",
                "critical2",
                "noncritical3",
            };

            var criticalFields = new string[]
            {
                "critical1",
                "critical2",
            };

            var result = RollbarPayloadScrubber.FilterOutCriticalFields(null, null);

            Assert.IsNotNull(result);
            Assert.AreEqual(0, result.Count());

            result = RollbarPayloadScrubber.FilterOutCriticalFields(null, Array.Empty <string>());
            Assert.IsNotNull(result);
            Assert.AreEqual(0, result.Count());

            result = RollbarPayloadScrubber.FilterOutCriticalFields(Array.Empty <string>(), null);
            Assert.IsNotNull(result);
            Assert.AreEqual(0, result.Count());

            result = RollbarPayloadScrubber.FilterOutCriticalFields(Array.Empty <string>(), Array.Empty <string>());
            Assert.IsNotNull(result);
            Assert.AreEqual(0, result.Count());

            result = RollbarPayloadScrubber.FilterOutCriticalFields(inputFileds, null);
            Assert.AreEqual(inputFileds.Length, result.Count());

            result = RollbarPayloadScrubber.FilterOutCriticalFields(inputFileds, Array.Empty <string>());
            Assert.AreEqual(inputFileds.Length, result.Count());

            result = RollbarPayloadScrubber.FilterOutCriticalFields(inputFileds, criticalFields);
            Assert.AreEqual(inputFileds.Length - criticalFields.Length, result.Count());
        }
        public void DataFieldFilteringTest()
        {
            string[] criticalDataFields = new string[]
            {
                "access_token",
                "headers",
            };

            string[] scrubFields = new string[]
            {
                "one",
                "Access_token",
                "access_token",
                "headers",
                "two",
            };

            string[] expectedFields = new string[]
            {
                "one",
                "Access_token",
                "two",
            };

            var result = RollbarPayloadScrubber.FilterOutCriticalFields(scrubFields, criticalDataFields);

            Assert.AreEqual(expectedFields.Length, result.Count());

            int i = 0;

            while (i < expectedFields.Length)
            {
                Assert.AreEqual(expectedFields[i], result.ElementAt(i));
                i++;
            }
        }