// private methods
 private BsonValue ExecuteOperation(EvalOperation operation, bool async)
 {
     using (var binding = CreateReadWriteBinding())
     {
         return(ExecuteOperation(operation, binding, async));
     }
 }
예제 #2
0
 // private methods
 private BsonValue ExecuteOperation(EvalOperation operation, bool async)
 {
     using (var binding = CoreTestConfiguration.GetReadWriteBinding())
     {
         return(ExecuteOperation(operation, binding, async));
     }
 }
        public void ExecuteAsync_should_throw_when_binding_isNull()
        {
            var function = "return 1";
            var subject  = new EvalOperation(_databaseNamespace, function, _messageEncoderSettings);

            Action action = () => subject.ExecuteAsync(null).GetAwaiter().GetResult();

            action.ShouldThrow <ArgumentNullException>();
        }
        public void Args_should_work()
        {
            var function = new BsonJavaScript("return 1");
            var subject  = new EvalOperation(_databaseNamespace, function, _messageEncoderSettings);
            var args     = new BsonValue[] { 1, 2, 3 };

            subject.Args = args;

            subject.Args.Should().Equal(args);
        }
예제 #5
0
        public void Execute_should_return_expected_result(
            [Values(false, true)]
            bool async)
        {
            var function = "return 1";
            var subject  = new EvalOperation(_databaseNamespace, function, _messageEncoderSettings);

            var result = ExecuteOperation(subject, async);

            result.Should().Be(1.0);
        }
        public void NoLock_should_work(
            [Values(null, false, true)]
            bool?value)
        {
            var function = new BsonJavaScript("return 1");
            var subject  = new EvalOperation(_databaseNamespace, function, _messageEncoderSettings);

            subject.NoLock = value;

            subject.NoLock.Should().Be(value);
        }
예제 #7
0
 private BsonValue ExecuteOperation(EvalOperation operation, IWriteBinding binding, bool async)
 {
     if (async)
     {
         return(operation.ExecuteAsync(binding, CancellationToken.None).GetAwaiter().GetResult());
     }
     else
     {
         return(operation.Execute(binding, CancellationToken.None));
     }
 }
예제 #8
0
        public void Execute_should_throw_when_binding_isNull(
            [Values(false, true)]
            bool async)
        {
            var function = "return 1";
            var subject  = new EvalOperation(_adminDatabaseNamespace, function, _messageEncoderSettings);

            Action action = () => ExecuteOperation(subject, null, async);

            action.ShouldThrow <ArgumentNullException>();
        }
        public void MaxTime_should_work(
            [Values(null, 0, 1)]
            int?value)
        {
            var function = new BsonJavaScript("return 1");
            var subject  = new EvalOperation(_databaseNamespace, function, _messageEncoderSettings);
            var maxTime  = value.HasValue ? (TimeSpan?)TimeSpan.FromSeconds(value.Value) : null;

            subject.MaxTime = maxTime;

            subject.MaxTime.Should().Be(maxTime);
        }
        public void MaxTime_get_and_set_should_work(
            [Values(-10000, 0, 1, 10000, 99999)] long maxTimeTicks)
        {
            var function = new BsonJavaScript("return 1");
            var subject  = new EvalOperation(_adminDatabaseNamespace, function, _messageEncoderSettings);
            var value    = TimeSpan.FromTicks(maxTimeTicks);

            subject.MaxTime = value;
            var result = subject.MaxTime;

            result.Should().Be(value);
        }
예제 #11
0
        public void Execute_should_return_expected_result(
            [Values(false, true)]
            bool async)
        {
            RequireServer.Check().Authentication(false);
            var function = "return 1";
            var subject  = new EvalOperation(_adminDatabaseNamespace, function, _messageEncoderSettings);

            var result = ExecuteOperation(subject, async);

            result.Should().Be(1.0);
        }
예제 #12
0
        public void Execute_should_return_expected_result_when_args_are_provided(
            [Values(false, true)]
            bool async)
        {
            var function = "function(x) { return x; }";
            var subject  = new EvalOperation(_databaseNamespace, function, _messageEncoderSettings);

            subject.Args = new BsonValue[] { 1 };

            var result = ExecuteOperation(subject, async);

            result.Should().Be(1.0);
        }
        public void MaxTime_set_should_throw_when_value_is_invalid(
            [Values(-10001, -9999, -1)] long maxTimeTicks)
        {
            var function = new BsonJavaScript("return 1");
            var subject  = new EvalOperation(_adminDatabaseNamespace, function, _messageEncoderSettings);
            var value    = TimeSpan.FromTicks(maxTimeTicks);

            var exception = Record.Exception(() => subject.MaxTime = value);

            var e = exception.Should().BeOfType <ArgumentOutOfRangeException>().Subject;

            e.ParamName.Should().Be("value");
        }
        public void CreateCommand_should_return_expected_result()
        {
            var function       = new BsonJavaScript("return 1");
            var subject        = new EvalOperation(_databaseNamespace, function, _messageEncoderSettings);
            var expectedResult = new BsonDocument
            {
                { "$eval", function }
            };

            var result = subject.CreateCommand();

            result.Should().Be(expectedResult);
        }
        public void Execute_should_return_expected_result_when_args_are_provided(
            [Values(false, true)]
            bool async)
        {
            RequireServer.Check().Supports(Feature.Eval).Authentication(false);
            var function = "function(x) { return x; }";
            var subject  = new EvalOperation(_adminDatabaseNamespace, function, _messageEncoderSettings);

            subject.Args = new BsonValue[] { 1 };

            var result = ExecuteOperation(subject, async);

            result.Should().Be(1.0);
        }
        public async Task ExecuteAsync_should_return_expected_result()
        {
            var function = "return 1";
            var subject  = new EvalOperation(_databaseNamespace, function, _messageEncoderSettings);

            BsonValue result;

            using (var binding = SuiteConfiguration.GetReadWriteBinding())
            {
                result = await subject.ExecuteAsync(binding);
            }

            result.Should().Be(1);
        }
        public void constructor_should_initialize_subject()
        {
            var function = new BsonJavaScript("return 1");

            var subject = new EvalOperation(_databaseNamespace, function, _messageEncoderSettings);

            subject.Args.Should().BeNull();
            subject.DatabaseNamespace.Should().Be(_databaseNamespace);
            subject.Function.Should().Be(function);
            subject.MaxTime.Should().NotHaveValue();
            // subject.MessageEncoderSettings.Should().Be(_messageEncoderSettings);
            Assert.That(subject.MessageEncoderSettings, Is.EqualTo(_messageEncoderSettings));
            subject.NoLock.Should().NotHaveValue();
        }
예제 #18
0
        public void Execute_should_return_expected_result_when_noLock_is_provided(
            [Values(false, true)]
            bool async)
        {
            RequireServer.Where(authentication: AuthenticationRequirement.Off);
            var function = "return 1";
            var subject  = new EvalOperation(_adminDatabaseNamespace, function, _messageEncoderSettings);

            subject.NoLock = true;

            var result = ExecuteOperation(subject, async);

            result.Should().Be(1.0);
        }
        public async Task ExecuteAsync_should_return_expected_result_when_args_are_provided()
        {
            var function = "function(x) { return x; }";
            var subject  = new EvalOperation(_databaseNamespace, function, _messageEncoderSettings);

            subject.Args = new BsonValue[] { 1 };

            BsonValue result;

            using (var binding = SuiteConfiguration.GetReadWriteBinding())
            {
                result = await subject.ExecuteAsync(binding);
            }

            result.Should().Be(1);
        }
        public void CreateCommand_should_return_expected_result_when_noLock_is_provided()
        {
            var function = new BsonJavaScript("return 1");
            var subject  = new EvalOperation(_databaseNamespace, function, _messageEncoderSettings);

            subject.NoLock = true;
            var expectedResult = new BsonDocument
            {
                { "$eval", function },
                { "nolock", true }
            };

            var result = subject.CreateCommand();

            result.Should().Be(expectedResult);
        }
예제 #21
0
        public async Task ExecuteAsync_should_return_expected_result_when_noLock_is_provided()
        {
            var function = "return 1";
            var subject  = new EvalOperation(_databaseNamespace, function, _messageEncoderSettings);

            subject.NoLock = true;

            BsonValue result;

            using (var binding = CoreTestConfiguration.GetReadWriteBinding())
            {
                result = await subject.ExecuteAsync(binding, CancellationToken.None);
            }

            result.Should().Be(1.0);
        }
        public void CreateCommand_should_return_expected_result_when_maxTime_is_provided()
        {
            var function = new BsonJavaScript("return 1");
            var subject  = new EvalOperation(_databaseNamespace, function, _messageEncoderSettings);

            subject.MaxTime = TimeSpan.FromSeconds(1);
            var expectedResult = new BsonDocument
            {
                { "$eval", function },
                { "maxTimeMS", 1000.0 }
            };

            var result = subject.CreateCommand();

            result.Should().Be(expectedResult);
        }
        public void CreateCommand_should_return_expected_result_when_args_are_provided()
        {
            var function = new BsonJavaScript("return 1");
            var subject  = new EvalOperation(_databaseNamespace, function, _messageEncoderSettings);
            var args     = new BsonValue[] { 1, 2, 3 };

            subject.Args = args;
            var expectedResult = new BsonDocument
            {
                { "$eval", function },
                { "args", new BsonArray(args) }
            };

            var result = subject.CreateCommand();

            result.Should().Be(expectedResult);
        }
        public void Execute_should_throw_when_maxTime_is_exceeded(
            [Values(false, true)] bool async)
        {
            RequireServer.Check().Supports(Feature.Eval, Feature.FailPoints).Authentication(false).ClusterTypes(ClusterType.Standalone, ClusterType.ReplicaSet);
            var function = "return 1";
            var subject  = new EvalOperation(_adminDatabaseNamespace, function, _messageEncoderSettings)
            {
                MaxTime = TimeSpan.FromSeconds(9001)
            };

            using (var failPoint = FailPoint.ConfigureAlwaysOn(_cluster, _session, FailPointName.MaxTimeAlwaysTimeout))
            {
                var exception = Record.Exception(() => ExecuteOperation(subject, failPoint.Binding, async));

                exception.Should().BeOfType <MongoExecutionTimeoutException>();
            }
        }
        public void CreateCommand_should_return_expected_result_when_MaxTime_is_set(long maxTimeTicks, int expectedMaxTimeMS)
        {
            var function = new BsonJavaScript("return 1");
            var subject  = new EvalOperation(_adminDatabaseNamespace, function, _messageEncoderSettings)
            {
                MaxTime = TimeSpan.FromTicks(maxTimeTicks)
            };
            var expectedResult = new BsonDocument
            {
                { "$eval", function },
                { "maxTimeMS", expectedMaxTimeMS }
            };

            var result = subject.CreateCommand();

            result.Should().Be(expectedResult);
            result["maxTimeMS"].BsonType.Should().Be(BsonType.Int32);
        }