public void TestSubjects()
        {
            StreamConfiguration.StreamConfigurationBuilder builder = StreamConfiguration.Builder();

            // subjects(...) replaces
            builder.WithSubjects(Subject(0));
            AssertSubjects(builder.Build(), 0);

            // subjects(...) replaces
            builder.WithSubjects();
            AssertSubjects(builder.Build());

            // subjects(...) replaces
            builder.WithSubjects(Subject(1));
            AssertSubjects(builder.Build(), 1);

            // Subjects(...) replaces
            builder.WithSubjects((string)null);
            AssertSubjects(builder.Build());

            // Subjects(...) replaces
            builder.WithSubjects(Subject(2), Subject(3));
            AssertSubjects(builder.Build(), 2, 3);

            // Subjects(...) replaces
            builder.WithSubjects(Subject(101), null, Subject(102));
            AssertSubjects(builder.Build(), 101, 102);

            // Subjects(...) replaces
            List <String> list45 = new List <String>();

            list45.Add(Subject(4));
            list45.Add(Subject(5));
            builder.WithSubjects(list45);
            AssertSubjects(builder.Build(), 4, 5);

            // AddSubjects(...) adds unique
            builder.AddSubjects(Subject(5), Subject(6));
            AssertSubjects(builder.Build(), 4, 5, 6);

            // AddSubjects(...) adds unique
            List <String> list678 = new List <String>();

            list678.Add(Subject(6));
            list678.Add(Subject(7));
            list678.Add(Subject(8));
            builder.AddSubjects(list678);
            AssertSubjects(builder.Build(), 4, 5, 6, 7, 8);

            // AddSubjects(...) null check
            builder.AddSubjects((String[])null);
            AssertSubjects(builder.Build(), 4, 5, 6, 7, 8);

            // AddSubjects(...) null check
            builder.AddSubjects((List <String>)null);
            AssertSubjects(builder.Build(), 4, 5, 6, 7, 8);
        }
        public void TestDiscardPolicy()
        {
            StreamConfiguration.StreamConfigurationBuilder builder = StreamConfiguration.Builder();
            Assert.Equal(DiscardPolicy.Old, builder.Build().DiscardPolicy);

            builder.WithDiscardPolicy(DiscardPolicy.New);
            Assert.Equal(DiscardPolicy.New, builder.Build().DiscardPolicy);

            builder.WithDiscardPolicy(null);
            Assert.Equal(DiscardPolicy.Old, builder.Build().DiscardPolicy);
        }
        public void TestStorageType()
        {
            StreamConfiguration.StreamConfigurationBuilder builder = StreamConfiguration.Builder();
            Assert.Equal(StorageType.File, builder.Build().StorageType);

            builder.WithStorageType(StorageType.Memory);
            Assert.Equal(StorageType.Memory, builder.Build().StorageType);

            builder.WithStorageType(null);
            Assert.Equal(StorageType.File, builder.Build().StorageType);
        }
        public void TestRetentionPolicy()
        {
            StreamConfiguration.StreamConfigurationBuilder builder = StreamConfiguration.Builder();
            Assert.Equal(RetentionPolicy.Limits, builder.Build().RetentionPolicy);

            builder.WithRetentionPolicy(RetentionPolicy.Interest);
            Assert.Equal(RetentionPolicy.Interest, builder.Build().RetentionPolicy);

            builder.WithRetentionPolicy(RetentionPolicy.WorkQueue);
            Assert.Equal(RetentionPolicy.WorkQueue, builder.Build().RetentionPolicy);

            builder.WithRetentionPolicy(null);
            Assert.Equal(RetentionPolicy.Limits, builder.Build().RetentionPolicy);
        }
        public void TestConstruction()
        {
            StreamConfiguration testSc = getTestConfiguration();

            // from json
            Validate(testSc);

            // Validate(new StreamConfiguration(testSc.ToJsonNode()));
            Validate(new StreamConfiguration(testSc.ToJsonNode().ToString()));

            StreamConfiguration.StreamConfigurationBuilder builder = StreamConfiguration.Builder(testSc);
            Validate(builder.Build());

            builder.WithName(testSc.Name)
            .WithSubjects(testSc.Subjects)
            .WithRetentionPolicy(testSc.RetentionPolicy)
            .WithMaxConsumers(testSc.MaxConsumers)
            .WithMaxMessages(testSc.MaxMsgs)
            .WithMaxMessagesPerSubject(testSc.MaxMsgsPerSubject)
            .WithMaxBytes(testSc.MaxBytes)
            .WithMaxAge(testSc.MaxAge)
            .WithMaxMsgSize(testSc.MaxValueSize)
            .WithStorageType(testSc.StorageType)
            .WithReplicas(testSc.Replicas)
            .WithNoAck(testSc.NoAck)
            .WithTemplateOwner(testSc.TemplateOwner)
            .WithDiscardPolicy(testSc.DiscardPolicy)
            .WithDuplicateWindow(testSc.DuplicateWindow)
            .WithPlacement(testSc.Placement)
            .WithMirror(testSc.Mirror)
            .WithSources(testSc.Sources)
            ;
            Validate(builder.Build());
            Validate(builder.AddSources((Source)null).Build());

            List <Source> sources = new List <Source>(testSc.Sources);

            sources.Add(null);
            Source copy = new Source(sources[0].ToJsonNode());

            sources.Add(copy);
            Validate(builder.AddSources(sources).Build());
        }