示例#1
0
 public void HandlesNoMasks()
 {
     var secretMasker = new SecretMasker();
     var input = "abcdefg";
     var result = secretMasker.MaskSecrets(input);
     Assert.Equal(input, result);
 }
示例#2
0
        public TestHostContext(object testClass, [CallerMemberName] string testName = "")
        {
            ArgUtil.NotNull(testClass, nameof(testClass));
            ArgUtil.NotNullOrEmpty(testName, nameof(testName));
            _testName = testName;

            // Trim the test assembly's root namespace from the test class's full name.
            _suiteName = testClass.GetType().FullName.Substring(
                startIndex: typeof(Tests.Program).FullName.LastIndexOf(nameof(Program)));
            _suiteName = _suiteName.Replace(".", "_");

            // Setup the trace manager.
            TraceFileName = Path.Combine(
                IOUtil.GetBinPath(),
                $"trace_{_suiteName}_{_testName}.log");
            if (File.Exists(TraceFileName))
            {
                File.Delete(TraceFileName);
            }

            Stream logFile       = File.Create(TraceFileName);
            var    traceListener = new TextWriterTraceListener(logFile);

            _secretMasker = new SecretMasker();
            _traceManager = new TraceManager(traceListener, _secretMasker);
            SetSingleton <ISecretMasker>(_secretMasker);

            // inject a terminal in silent mode so all console output
            // goes to the test trace file
            _term        = new Terminal();
            _term.Silent = true;
            SetSingleton <ITerminal>(_term);
            EnqueueInstance <ITerminal>(_term);
        }
        private ISecretMasker initSecretMasker()
        {
            var testSecretMasker = new SecretMasker();

            testSecretMasker.AddRegex(AdditionalMaskingRegexes.UrlSecretPattern);

            return(testSecretMasker);
        }
示例#4
0
        public void HandlesNoMasks()
        {
            var secretMasker = new SecretMasker();
            var input        = "abcdefg";
            var result       = secretMasker.MaskSecrets(input);

            Assert.Equal(input, result);
        }
示例#5
0
        public void HandlesUrlEscapedInput()
        {
            var secretMasker = new SecretMasker();

            secretMasker.AddValue("b c");

            var result = secretMasker.MaskSecrets("ab%20cd");

            Assert.Equal("a********d", result);
        }
示例#6
0
        public void ReplacesMultipleAdjacentInstances()
        {
            var secretMasker = new SecretMasker();
            secretMasker.AddValue("abc");

            var input = "abcabcdef";
            var result = secretMasker.MaskSecrets(input);

            Assert.Equal("********def", result);
        }
示例#7
0
        public void ReplacesMultipleInstances()
        {
            var secretMasker = new SecretMasker();
            secretMasker.AddValue("def");

            var input = "abcdefgdef";
            var result = secretMasker.MaskSecrets(input);

            Assert.Equal("abc********g********", result);
        }
示例#8
0
        public void HandlesJsonEscapedInput()
        {
            var secretMasker = new SecretMasker();

            secretMasker.AddValue(@"b\c");

            var result = secretMasker.MaskSecrets(@"ab\\cd");

            Assert.Equal("a********d", result);
        }
示例#9
0
        public void ReplacesValue()
        {
            var secretMasker = new SecretMasker();
            secretMasker.AddValue("def");

            var input = "abcdefg";
            var result = secretMasker.MaskSecrets(input);

            Assert.Equal("abc********g", result);
        }
示例#10
0
        public void ReplacesMultipleAdjacentInstances()
        {
            var secretMasker = new SecretMasker();

            secretMasker.AddValue("abc");

            var input  = "abcabcdef";
            var result = secretMasker.MaskSecrets(input);

            Assert.Equal("********def", result);
        }
示例#11
0
        public void HandlesEmptyInput()
        {
            var secretMasker = new SecretMasker();
            secretMasker.AddValue("abcd");

            var result = secretMasker.MaskSecrets(null);
            Assert.Equal(string.Empty, result);

            result = secretMasker.MaskSecrets(string.Empty);
            Assert.Equal(string.Empty, result);
        }
示例#12
0
        public void ReplacesMultipleSecrets()
        {
            var secretMasker = new SecretMasker();
            secretMasker.AddValue("bcd");
            secretMasker.AddValue("fgh");

            var input = "abcdefghi";
            var result = secretMasker.MaskSecrets(input);

            Assert.Equal("a********e********i", result);
        }
示例#13
0
        public void ReplacesMultipleInstances()
        {
            var secretMasker = new SecretMasker();

            secretMasker.AddValue("def");

            var input  = "abcdefgdef";
            var result = secretMasker.MaskSecrets(input);

            Assert.Equal("abc********g********", result);
        }
示例#14
0
        public void ReplacesValue()
        {
            var secretMasker = new SecretMasker();

            secretMasker.AddValue("def");

            var input  = "abcdefg";
            var result = secretMasker.MaskSecrets(input);

            Assert.Equal("abc********g", result);
        }
示例#15
0
        public void ReplacesMultipleSecrets()
        {
            var secretMasker = new SecretMasker();

            secretMasker.AddValue("bcd");
            secretMasker.AddValue("fgh");

            var input  = "abcdefghi";
            var result = secretMasker.MaskSecrets(input);

            Assert.Equal("a********e********i", result);
        }
示例#16
0
        public void HandlesEmptyInput()
        {
            var secretMasker = new SecretMasker();

            secretMasker.AddValue("abcd");

            var result = secretMasker.MaskSecrets(null);

            Assert.Equal(string.Empty, result);

            result = secretMasker.MaskSecrets(string.Empty);
            Assert.Equal(string.Empty, result);
        }
示例#17
0
        public void ReplacesAdjacentSecrets()
        {
            var secretMasker = new SecretMasker();

            secretMasker.AddValue("efg");
            secretMasker.AddValue("bcd");

            var input  = "abcdefgh";
            var result = secretMasker.MaskSecrets(input);

            // two adjacent secrets are basically one big secret

            Assert.Equal("a********h", result);
        }
示例#18
0
        public void ReplacesOverlappingSecrets()
        {
            var secretMasker = new SecretMasker();

            secretMasker.AddValue("def");
            secretMasker.AddValue("bcd");

            var input  = "abcdefg";
            var result = secretMasker.MaskSecrets(input);

            // a naive replacement would replace "def" first, and never find "bcd", resulting in "abc********g"
            // or it would replace "bcd" first, and never find "def", resulting in "a********efg"

            Assert.Equal("a********g", result);
        }
示例#19
0
        public TestHostContext(object testClass, [CallerMemberName] string testName = "")
        {
            ArgUtil.NotNull(testClass, nameof(testClass));
            ArgUtil.NotNullOrEmpty(testName, nameof(testName));
            _loadContext            = AssemblyLoadContext.GetLoadContext(typeof(TestHostContext).GetTypeInfo().Assembly);
            _loadContext.Unloading += LoadContext_Unloading;
            _testName = testName;

            // Trim the test assembly's root namespace from the test class's full name.
            _suiteName = testClass.GetType().FullName.Substring(
                startIndex: typeof(Tests.TestHostContext).FullName.LastIndexOf(nameof(TestHostContext)));
            _suiteName = _suiteName.Replace(".", "_");

            // Setup the trace manager.
            TraceFileName = Path.Combine(
                Path.Combine(TestUtil.GetSrcPath(), "Test", "TestLogs"),
                $"trace_{_suiteName}_{_testName}.log");
            if (File.Exists(TraceFileName))
            {
                File.Delete(TraceFileName);
            }

            var traceListener = new HostTraceListener(TraceFileName);

            traceListener.DisableConsoleReporting = true;
            _secretMasker = new SecretMasker();
            _secretMasker.AddValueEncoder(ValueEncoders.JsonStringEscape);
            _secretMasker.AddValueEncoder(ValueEncoders.UriDataEscape);
            _secretMasker.AddValueEncoder(ValueEncoders.BackslashEscape);
            _traceManager = new TraceManager(traceListener, _secretMasker);
            _trace        = GetTrace(nameof(TestHostContext));

            // inject a terminal in silent mode so all console output
            // goes to the test trace file
            _term        = new Terminal();
            _term.Silent = true;
            SetSingleton <ITerminal>(_term);
            EnqueueInstance <ITerminal>(_term);

            if (!TestUtil.IsWindows())
            {
                string eulaFile = Path.Combine(GetDirectory(WellKnownDirectory.Externals), Constants.Path.TeeDirectory, "license.html");
                Directory.CreateDirectory(GetDirectory(WellKnownDirectory.Externals));
                Directory.CreateDirectory(Path.Combine(GetDirectory(WellKnownDirectory.Externals), Constants.Path.TeeDirectory));
                File.WriteAllText(eulaFile, "testeulafile");
            }
        }
示例#20
0
        public TestHostContext(object testClass, [CallerMemberName] string testName = "")
        {
            ArgUtil.NotNull(testClass, nameof(testClass));
            ArgUtil.NotNullOrEmpty(testName, nameof(testName));
            _loadContext            = AssemblyLoadContext.GetLoadContext(typeof(TestHostContext).GetTypeInfo().Assembly);
            _loadContext.Unloading += LoadContext_Unloading;
            _testName = testName;

            // Trim the test assembly's root namespace from the test class's full name.
            _suiteName = testClass.GetType().FullName.Substring(
                startIndex: typeof(Tests.TestHostContext).FullName.LastIndexOf(nameof(TestHostContext)));
            _suiteName = _suiteName.Replace(".", "_");

            // Setup the trace manager.
            TraceFileName = Path.Combine(
                Path.Combine(TestUtil.GetSrcPath(), "Test", "TestLogs"),
                $"trace_{_suiteName}_{_testName}.log");
            if (File.Exists(TraceFileName))
            {
                File.Delete(TraceFileName);
            }

            var traceListener = new HostTraceListener(TraceFileName);

            _secretMasker = new SecretMasker();
            _traceManager = new TraceManager(traceListener, _secretMasker);
            _trace        = GetTrace(nameof(TestHostContext));
            SetSingleton <ISecretMasker>(_secretMasker);

            // inject a terminal in silent mode so all console output
            // goes to the test trace file
            _term        = new Terminal();
            _term.Silent = true;
            SetSingleton <ITerminal>(_term);
            EnqueueInstance <ITerminal>(_term);
        }
示例#21
0
        public void ReplacesOverlappingSecrets()
        {
            var secretMasker = new SecretMasker();
            secretMasker.AddValue("def");
            secretMasker.AddValue("bcd");

            var input = "abcdefg";
            var result = secretMasker.MaskSecrets(input);

            // a naive replacement would replace "def" first, and never find "bcd", resulting in "abc********g"
            // or it would replace "bcd" first, and never find "def", resulting in "a********efg"

            Assert.Equal("a********g", result);
        }
示例#22
0
        public void ReplacesAdjacentSecrets()
        {
            var secretMasker = new SecretMasker();
            secretMasker.AddValue("efg");
            secretMasker.AddValue("bcd");

            var input = "abcdefgh";
            var result = secretMasker.MaskSecrets(input);

            // two adjacent secrets are basically one big secret

            Assert.Equal("a********h", result);
        }