Пример #1
0
        public static TcpClient ConnectEx(this TcpClient client,
                                          IPAddress address, int port,
                                          int timeoutMillseconds = DefaultTimeoutMillseconds)
        {
            if (client == null)
            {
                throw new ArgumentNullException("client");
            }

            if (timeoutMillseconds <= 0)
            {
                throw new ArgumentOutOfRangeException("timeoutMillseconds");
            }
            ManualResetEvent timeoutEvent = new ManualResetEvent(false);
            var context = new TimeoutContext <TcpClient>(client, timeoutEvent);

            client.BeginConnect(address, port, TcpClientEndConnect, context);

            if (timeoutEvent.WaitOne(timeoutMillseconds, false))
            {
                if (context.Success)
                {
                    return(client);
                }
                else
                {
                    throw context.Error;
                }
            }
            else
            {
                client.Close();
                throw new TimeoutException(string.Format("连接 {0}:{1} 超时", address, port));
            }
        }
Пример #2
0
            public void Setting_CommandTimeout_to_infinite_sets_to_zero()
            {
                using var context = new TimeoutContext();

                context.Database.SetCommandTimeout(Timeout.InfiniteTimeSpan);
                Assert.Equal(0, context.Database.GetCommandTimeout());
            }
            public void Setting_CommandTimeout_to_negative_value_throws()
            {
                Assert.Throws <InvalidOperationException>(
                    () => new DbContextOptionsBuilder().UseSqlServer(
                        "No=LoveyDovey",
                        b => b.CommandTimeout(-55)));

                using (var context = new TimeoutContext())
                {
                    Assert.Null(context.Database.GetCommandTimeout());

                    Assert.Throws <ArgumentException>(
                        () => context.Database.SetCommandTimeout(-3));
                    Assert.Throws <ArgumentException>(
                        () => context.Database.SetCommandTimeout(TimeSpan.FromSeconds(-3)));

                    Assert.Throws <ArgumentException>(
                        () => context.Database.SetCommandTimeout(-99));
                    Assert.Throws <ArgumentException>(
                        () => context.Database.SetCommandTimeout(TimeSpan.FromSeconds(-99)));

                    Assert.Throws <ArgumentException>(
                        () => context.Database.SetCommandTimeout(TimeSpan.FromSeconds(uint.MaxValue)));
                }
            }
Пример #4
0
        public void Default_timeout_is_used_if_none_is_set()
        {
            using (var context = new TimeoutContext())
            {
                context.Time.Load();

                Assert.Equal("30", GetLoggedTimeout());
            }
        }
Пример #5
0
        public void Default_timeout_is_used_if_none_is_set()
        {
            using (var context = new TimeoutContext())
            {
                context.Time.Load();

                Assert.Equal("30", GetLoggedTimeout());
            }
        }
Пример #6
0
        public void DbContext_timeout_is_used_for_generic_Database_SqlQuery()
        {
            using (var context = new TimeoutContext())
            {
                context.Database.CommandTimeout = 66;
                context.Database.SqlQuery <SomeTime>("select * from SomeTimes").ToList <SomeTime>();

                Assert.Equal("66", GetLoggedTimeout());
            }
        }
Пример #7
0
        public void DbContext_timeout_is_used_for_async_Find()
        {
            using (var context = new TimeoutContext())
            {
                context.Database.CommandTimeout = 66;
                context.Time.FindAsync(0).Wait();

                Assert.Equal("66", GetLoggedTimeout());
            }
        }
Пример #8
0
        public void DbContext_timeout_is_used_for_queries()
        {
            using (var context = new TimeoutContext())
            {
                context.Database.CommandTimeout = 66;
                context.Time.Load();

                Assert.Equal("66", GetLoggedTimeout());
            }
        }
Пример #9
0
        public void DbContext_timeout_is_used_for_explicit_loading()
        {
            using (var context = new TimeoutContext())
            {
                context.Database.CommandTimeout = 66;
                context.Entry(context.Space.Attach(context.Space.Create())).Collection(e => e.Time).Load();

                Assert.Equal("66", GetLoggedTimeout());
            }
        }
Пример #10
0
        public void DbContext_timeout_is_used_for_queries()
        {
            using (var context = new TimeoutContext())
            {
                context.Database.CommandTimeout = 66;
                context.Time.Load();

                Assert.Equal("66", GetLoggedTimeout());
            }
        }
Пример #11
0
        public void DbContext_timeout_is_used_for_lazy_loading()
        {
            using (var context = new TimeoutContext())
            {
                context.Database.CommandTimeout = 66;
                var _ = context.Space.Attach(context.Space.Create()).Time;

                Assert.Equal("66", GetLoggedTimeout());
            }
        }
Пример #12
0
        public void DbContext_timeout_is_used_for_lazy_loading()
        {
            using (var context = new TimeoutContext())
            {
                context.Database.CommandTimeout = 66;
                var _ = context.Space.Attach(context.Space.Create()).Time;

                Assert.Equal("66", GetLoggedTimeout());
            }
        }
Пример #13
0
 public void CommandTimeout_throws_for_negative_values()
 {
     using (var context = new TimeoutContext())
     {
         Assert.Equal(
             Strings.ObjectContext_InvalidCommandTimeout,
             Assert.Throws <ArgumentException>(
                 () => context.Database.CommandTimeout = -1).Message);
     }
 }
Пример #14
0
        public void DbContext_timeout_is_used_for_Database_Delete()
        {
            using (var context = new TimeoutContext())
            {
                context.Database.CommandTimeout = 66;
                context.Database.Delete();

                Assert.Equal("66", GetLoggedDdlTimeout("DbDeleteDatabase"));
            }
        }
Пример #15
0
        public void DbContext_timeout_is_used_for_async_non_generic_Database_SqlQuery()
        {
            using (var context = new TimeoutContext())
            {
                context.Database.CommandTimeout = 66;
                context.Database.SqlQuery(typeof(SomeTime), "select * from SomeTimes").ToListAsync().Wait();

                Assert.Equal("66", GetLoggedTimeout());
            }
        }
Пример #16
0
        public void DbContext_timeout_is_used_for_Database_CompatibleWithModel()
        {
            using (var context = new TimeoutContext())
            {
                context.Database.CommandTimeout = 66;
                context.Database.CompatibleWithModel(throwIfNoMetadata: false);

                Assert.True(GetAllLoggedTimeouts().Any());
                Assert.True(GetAllLoggedTimeouts().All(t => t == "66"));
            }
        }
            public void Default_value_for_CommandTimeout_is_null_and_can_be_changed_including_setting_to_null()
            {
                using (var context = new TimeoutContext())
                {
                    Assert.Null(context.Database.GetCommandTimeout());

                    context.Database.SetCommandTimeout(77);
                    Assert.Equal(77, context.Database.GetCommandTimeout());

                    context.Database.SetCommandTimeout(null);
                    Assert.Null(context.Database.GetCommandTimeout());
                }
            }
            public void Default_value_for_CommandTimeout_is_null_and_can_be_changed_including_setting_to_null()
            {
                using (var context = new TimeoutContext())
                {
                    Assert.Null(context.Database.AsRelational().Connection.CommandTimeout);

                    context.Database.AsRelational().Connection.CommandTimeout = 77;
                    Assert.Equal(77, context.Database.AsRelational().Connection.CommandTimeout);

                    context.Database.AsRelational().Connection.CommandTimeout = null;
                    Assert.Null(context.Database.AsRelational().Connection.CommandTimeout);
                }
            }
Пример #19
0
            public void Default_value_for_CommandTimeout_is_null_and_can_be_changed_including_setting_to_null()
            {
                using (var context = new TimeoutContext())
                {
                    Assert.Null(context.Database.AsRelational().Connection.CommandTimeout);

                    context.Database.AsRelational().Connection.CommandTimeout = 77;
                    Assert.Equal(77, context.Database.AsRelational().Connection.CommandTimeout);

                    context.Database.AsRelational().Connection.CommandTimeout = null;
                    Assert.Null(context.Database.AsRelational().Connection.CommandTimeout);
                }
            }
Пример #20
0
        public TimeoutTests()
        {
            WrappingAdoNetProvider<SqlClientFactory>.WrapProviders();

            using (var context = new TimeoutContext())
            {
                context.Database.Initialize(force: false);
                context.Database.CreateIfNotExists();
            }

            _log = WrappingAdoNetProvider<SqlClientFactory>.Instance.Log;
            _log.Clear();
        }
Пример #21
0
        public TimeoutTests()
        {
            WrappingAdoNetProvider <SqlClientFactory> .WrapProviders();

            using (var context = new TimeoutContext())
            {
                context.Database.Initialize(force: false);
                context.Database.CreateIfNotExists();
            }

            _log = WrappingAdoNetProvider <SqlClientFactory> .Instance.Log;
            _log.Clear();
        }
            public void Default_value_for_CommandTimeout_is_null_and_can_be_changed_including_setting_to_null()
            {
                using (var context = new TimeoutContext())
                {
                    Assert.Null(context.Database.GetCommandTimeout());

                    context.Database.SetCommandTimeout(77);
                    Assert.Equal(77, context.Database.GetCommandTimeout());

                    context.Database.SetCommandTimeout(null);
                    Assert.Null(context.Database.GetCommandTimeout());
                }
            }
Пример #23
0
            public void CommandTimeout_can_be_set_in_constructor_and_changed_on_DbContext_without_triggering_initialization()
            {
                using (var context = new TimeoutContext(77))
                {
                    Assert.Equal(77, context.Database.CommandTimeout);
                    Assert.Null(((LazyInternalContext)context.InternalContext).ObjectContextInUse);

                    context.Database.CommandTimeout = 88;
                    Assert.Equal(88, context.Database.CommandTimeout);
                    Assert.Null(((LazyInternalContext)context.InternalContext).ObjectContextInUse);

                    Assert.Equal(88, ((IObjectContextAdapter)context).ObjectContext.CommandTimeout);
                }
            }
Пример #24
0
        public void DbContext_timeout_is_used_for_async_Database_ExecuteSqlCommand()
        {
            using (var context = new TimeoutContext())
            {
                context.Database.CommandTimeout = 66;

                using (context.Database.BeginTransaction())
                {
                    context.Database.ExecuteSqlCommandAsync("update SomeTimes set SpaceId = 1 where Id = 1").Wait();
                }

                Assert.Equal("66", GetLoggedTimeout());
            }
        }
Пример #25
0
        public void DbContext_timeout_is_used_for_database_initialization()
        {
            using (var context = new TimeoutContext())
            {
                context.Database.Delete();
                _log.Clear();

                context.Database.CommandTimeout = 66;
                context.Database.Initialize(force: true);

                Assert.True(GetAllLoggedTimeouts().Any());
                Assert.True(GetAllLoggedTimeouts().All(t => t == "66"));
            }
        }
Пример #26
0
        public void DbContext_timeout_is_used_for_Database_CreateIfNotExists()
        {
            using (var context = new TimeoutContext())
            {
                context.Database.Delete();
                _log.Clear();

                context.Database.CommandTimeout = 66;
                context.Database.CreateIfNotExists();

                Assert.Equal("66", GetLoggedDdlTimeout("DbCreateDatabase"));
                Assert.True(GetAllLoggedTimeouts().All(t => t == "66"));
            }
        }
Пример #27
0
        public void DbContext_timeout_is_used_for_updates()
        {
            using (var context = new TimeoutContext())
            {
                context.Database.CommandTimeout = 66;

                using (context.Database.BeginTransaction())
                {
                    context.Space.Add(new SomeSpace());
                    context.SaveChanges();
                }

                Assert.Equal("66", GetLoggedTimeout());
            }
        }
Пример #28
0
        public void DbContext_timeout_is_used_for_updates()
        {
            using (var context = new TimeoutContext())
            {
                context.Database.CommandTimeout = 66;

                using (context.Database.BeginTransaction())
                {
                    context.Space.Add(new SomeSpace());
                    context.SaveChanges();
                }

                Assert.Equal("66", GetLoggedTimeout());
            }
        }
            public void Setting_CommandTimeout_to_negative_value_throws()
            {
                var optionsBuilder = new EntityOptionsBuilder().UseSqlServer("No=LoveyDovey");

                Assert.Throws <InvalidOperationException>(() => optionsBuilder.CommandTimeout(-55));

                using (var context = new TimeoutContext())
                {
                    Assert.Null(context.Database.AsRelational().Connection.CommandTimeout);

                    Assert.Throws <ArgumentException>(
                        () => context.Database.AsRelational().Connection.CommandTimeout = -3);

                    Assert.Throws <ArgumentException>(
                        () => context.Database.AsRelational().Connection.CommandTimeout = -99);
                }
            }
Пример #30
0
            public void Setting_CommandTimeout_to_negative_value_throws()
            {
                var options = new SqlServerDbContextOptions(new DbContextOptions());

                Assert.Throws <InvalidOperationException>(() => options.CommandTimeout(-55));

                using (var context = new TimeoutContext())
                {
                    Assert.Null(context.Database.AsRelational().Connection.CommandTimeout);

                    Assert.Throws <ArgumentException>(
                        () => context.Database.AsRelational().Connection.CommandTimeout = -3);

                    Assert.Throws <ArgumentException>(
                        () => context.Database.AsRelational().Connection.CommandTimeout = -99);
                }
            }
            public void Setting_CommandTimeout_to_negative_value_throws()
            {
                var optionsBuilder = new EntityOptionsBuilder().UseSqlServer("No=LoveyDovey");

                Assert.Throws<InvalidOperationException>(() => optionsBuilder.CommandTimeout(-55));

                using (var context = new TimeoutContext())
                {
                    Assert.Null(context.Database.AsRelational().Connection.CommandTimeout);

                    Assert.Throws<ArgumentException>(
                        () => context.Database.AsRelational().Connection.CommandTimeout = -3);

                    Assert.Throws<ArgumentException>(
                        () => context.Database.AsRelational().Connection.CommandTimeout = -99);
                }
            }
Пример #32
0
        public void DbContext_timeout_is_used_for_Database_ExecuteSqlCommand()
        {
            ExtendedSqlAzureExecutionStrategy.ExecuteNew(
                () =>
            {
                using (var context = new TimeoutContext())
                {
                    context.Database.CommandTimeout = 66;

                    using (context.Database.BeginTransaction())
                    {
                        context.Database.ExecuteSqlCommand("update SomeTimes set SpaceId = 1 where Id = 1");
                    }

                    Assert.Equal("66", GetLoggedTimeout());
                }
            });
        }
            public void Setting_CommandTimeout_to_negative_value_throws()
            {
                Assert.Throws<InvalidOperationException>(
                    () => new DbContextOptionsBuilder().UseSqlServer(
                        "No=LoveyDovey",
                        b => b.CommandTimeout(-55)));

                using (var context = new TimeoutContext())
                {
                    Assert.Null(context.Database.GetCommandTimeout());

                    Assert.Throws<ArgumentException>(
                        () => context.Database.SetCommandTimeout(-3));

                    Assert.Throws<ArgumentException>(
                        () => context.Database.SetCommandTimeout(-99));
                }
            }
Пример #34
0
        public void DbContext_timeout_is_used_for_updates()
        {
            ExtendedSqlAzureExecutionStrategy.ExecuteNew(
                () =>
            {
                using (var context = new TimeoutContext())
                {
                    context.Database.CommandTimeout = 66;

                    using (context.Database.BeginTransaction())
                    {
                        context.Space.Add(new SomeSpace());
                        context.SaveChanges();
                    }

                    Assert.Equal("66", GetLoggedTimeout());
                }
            });
        }
Пример #35
0
        public void DbContext_timeout_is_used_for_updates()
        {
            ExtendedSqlAzureExecutionStrategy.ExecuteNew(
                () =>
                {
                    using (var context = new TimeoutContext())
                    {
                        context.Database.CommandTimeout = 66;

                        using (context.Database.BeginTransaction())
                        {
                            context.Space.Add(new SomeSpace());
                            context.SaveChanges();
                        }

                        Assert.Equal("66", GetLoggedTimeout());
                    }
                });
        }
Пример #36
0
        public void Command_timeout_can_be_inherited_from_ObjectContext_and_can_be_changed_from_either_context()
        {
            using (var outerContext = new TimeoutContext())
            {
                var objectContext = ((IObjectContextAdapter)outerContext).ObjectContext;
                objectContext.CommandTimeout = 77;

                using (var context = new TimeoutContext(objectContext))
                {
                    Assert.Equal(77, context.Database.CommandTimeout);

                    context.Database.CommandTimeout = 88;
                    Assert.Equal(88, context.Database.CommandTimeout);
                    Assert.Equal(88, objectContext.CommandTimeout);

                    objectContext.CommandTimeout = 99;
                    Assert.Equal(99, context.Database.CommandTimeout);
                    Assert.Equal(99, objectContext.CommandTimeout);
                }
            }
        }
Пример #37
0
        public void DbContext_timeout_is_used_for_Database_CreateIfNotExists()
        {
            using (var context = new TimeoutContext())
            {
                context.Database.Delete();
                _log.Clear();

                context.Database.CommandTimeout = 66;
                context.Database.CreateIfNotExists();

                Assert.Equal("66", GetLoggedDdlTimeout("DbCreateDatabase"));
                Assert.True(GetAllLoggedTimeouts().All(t => t == "66"));
            }
        }
Пример #38
0
        public void DbContext_timeout_is_used_for_Database_ExecuteSqlCommand()
        {
            ExtendedSqlAzureExecutionStrategy.ExecuteNew(
                () =>
                {
                    using (var context = new TimeoutContext())
                    {
                        context.Database.CommandTimeout = 66;

                        using (context.Database.BeginTransaction())
                        {
                            context.Database.ExecuteSqlCommand("update SomeTimes set SpaceId = 1 where Id = 1");
                        }

                        Assert.Equal("66", GetLoggedTimeout());
                    }
                });
        }
Пример #39
0
            public void CommandTimeout_can_be_set_in_constructor_and_changed_on_DbContext_without_triggering_initialization()
            {
                using (var context = new TimeoutContext(77))
                {
                    Assert.Equal(77, context.Database.CommandTimeout);
                    Assert.Null(((LazyInternalContext)context.InternalContext).ObjectContextInUse);

                    context.Database.CommandTimeout = 88;
                    Assert.Equal(88, context.Database.CommandTimeout);
                    Assert.Null(((LazyInternalContext)context.InternalContext).ObjectContextInUse);

                    Assert.Equal(88, ((IObjectContextAdapter)context).ObjectContext.CommandTimeout);
                }
            }
Пример #40
0
 public void CommandTimeout_throws_for_negative_values()
 {
     using (var context = new TimeoutContext())
     {
         Assert.Equal(
             Strings.ObjectContext_InvalidCommandTimeout,
             Assert.Throws<ArgumentException>(
                 () => context.Database.CommandTimeout = -1).Message);
     }
 }
Пример #41
0
        public void Command_timeout_can_be_inherited_from_ObjectContext_and_can_be_changed_from_either_context()
        {
            using (var outerContext = new TimeoutContext())
            {
                var objectContext = ((IObjectContextAdapter)outerContext).ObjectContext;
                objectContext.CommandTimeout = 77;
                
                using (var context = new TimeoutContext(objectContext))
                {
                    Assert.Equal(77, context.Database.CommandTimeout);

                    context.Database.CommandTimeout = 88;
                    Assert.Equal(88, context.Database.CommandTimeout);
                    Assert.Equal(88, objectContext.CommandTimeout);

                    objectContext.CommandTimeout = 99;
                    Assert.Equal(99, context.Database.CommandTimeout);
                    Assert.Equal(99, objectContext.CommandTimeout);
                }
            }
        }
Пример #42
0
        public void DbContext_timeout_is_used_for_generic_Database_SqlQuery()
        {
            using (var context = new TimeoutContext())
            {
                context.Database.CommandTimeout = 66;
                context.Database.SqlQuery<SomeTime>("select * from SomeTimes").ToList<SomeTime>();

                Assert.Equal("66", GetLoggedTimeout());
            }
        }
Пример #43
0
        public void DbContext_timeout_is_used_for_Database_CompatibleWithModel()
        {
            using (var context = new TimeoutContext())
            {
                context.Database.CommandTimeout = 66;
                context.Database.CompatibleWithModel(throwIfNoMetadata: false);

                Assert.True(GetAllLoggedTimeouts().Any());
                Assert.True(GetAllLoggedTimeouts().All(t => t == "66"));
            }
        }
Пример #44
0
        public void DbContext_timeout_is_used_for_explicit_loading()
        {
            using (var context = new TimeoutContext())
            {
                context.Database.CommandTimeout = 66;
                context.Entry(context.Space.Attach(context.Space.Create())).Collection(e => e.Time).Load();

                Assert.Equal("66", GetLoggedTimeout());
            }
        }
Пример #45
0
        public void DbContext_timeout_is_used_for_Database_Delete()
        {
            using (var context = new TimeoutContext())
            {
                context.Database.CommandTimeout = 66;
                context.Database.Delete();

                Assert.Equal("66", GetLoggedDdlTimeout("DbDeleteDatabase"));
            }
        }
Пример #46
0
        public void DbContext_timeout_is_used_for_database_initialization()
        {
            using (var context = new TimeoutContext())
            {
                context.Database.Delete();
                _log.Clear();

                context.Database.CommandTimeout = 66;
                context.Database.Initialize(force: true);

                Assert.True(GetAllLoggedTimeouts().Any());
                Assert.True(GetAllLoggedTimeouts().All(t => t == "66"));
            }
        }
Пример #47
0
        public void DbContext_timeout_is_used_for_async_Find()
        {
            using (var context = new TimeoutContext())
            {
                context.Database.CommandTimeout = 66;
                context.Time.FindAsync(0).Wait();

                Assert.Equal("66", GetLoggedTimeout());
            }
        }
Пример #48
0
        public void DbContext_timeout_is_used_for_async_non_generic_Database_SqlQuery()
        {
            using (var context = new TimeoutContext())
            {
                context.Database.CommandTimeout = 66;
                context.Database.SqlQuery(typeof(SomeTime), "select * from SomeTimes").ToListAsync().Wait();

                Assert.Equal("66", GetLoggedTimeout());
            }
        }
Пример #49
0
        public void DbContext_timeout_is_used_for_async_Database_ExecuteSqlCommand()
        {
            using (var context = new TimeoutContext())
            {
                context.Database.CommandTimeout = 66;

                using (context.Database.BeginTransaction())
                {
                    context.Database.ExecuteSqlCommandAsync("update SomeTimes set SpaceId = 1 where Id = 1").Wait();
                }

                Assert.Equal("66", GetLoggedTimeout());
            }
        }