Искусственно создайте ошибку из-за тайм-аута соединения

В Java все переменные, которые вы объявляете, на самом деле являются «ссылками» на объекты (или примитивы), а не самими объектами.

При попытке выполнить один метод объекта , ссылка просит живой объект выполнить этот метод. Но если ссылка ссылается на NULL (ничего, нуль, void, nada), то нет способа, которым метод будет выполнен. Тогда runtime сообщит вам об этом, выбросив исключение NullPointerException.

Ваша ссылка «указывает» на нуль, таким образом, «Null -> Pointer».

Объект живет в памяти виртуальной машины пространство и единственный способ доступа к нему - использовать ссылки this. Возьмем этот пример:

public class Some {
    private int id;
    public int getId(){
        return this.id;
    }
    public setId( int newId ) {
        this.id = newId;
    }
}

И в другом месте вашего кода:

Some reference = new Some();    // Point to a new object of type Some()
Some otherReference = null;     // Initiallly this points to NULL

reference.setId( 1 );           // Execute setId method, now private var id is 1

System.out.println( reference.getId() ); // Prints 1 to the console

otherReference = reference      // Now they both point to the only object.

reference = null;               // "reference" now point to null.

// But "otherReference" still point to the "real" object so this print 1 too...
System.out.println( otherReference.getId() );

// Guess what will happen
System.out.println( reference.getId() ); // :S Throws NullPointerException because "reference" is pointing to NULL remember...

Это важно знать - когда больше нет ссылок на объект (в пример выше, когда reference и otherReference оба указывают на null), тогда объект «недоступен». Мы не можем работать с ним, поэтому этот объект готов к сбору мусора, и в какой-то момент VM освободит память, используемую этим объектом, и выделит другую.

270
задан Kevin Burke 6 November 2017 в 19:27
поделиться

11 ответов

Соединитесь с существующим хостом, но с портом, который заблокирован брандмауэром, который просто отбрасывает TCP пакеты SYN. Например, www.google.com:81.

279
ответ дан Alexander 23 November 2019 в 02:18
поделиться

Можно попытаться соединиться с одним из известных веб-сайтов по порту, который не может быть доступным снаружи - 200, например. Большинство брандмауэров работает в режиме DROP, и он моделирует тайм-аут для Вас.

-1
ответ дан Dmitry Khalatov 23 November 2019 в 02:18
поделиться

У меня были проблемы в том же направлении, Вы делаете. Для тестирования поведения программного обеспечения я просто отключил сетевой кабель в подходящее время. Я должен был установить точку останова прямо, прежде чем я хотел отключить кабель.

, Если я делал его снова, я поместил переключатель (нормально замкнутая мгновенная кнопка одна) в сетевом кабеле.

, Если физическое разъединение вызывает различное поведение, Вы могли бы подключить свой компьютер к дешевому концентратору и поместить переключатель, который я упомянул выше между Вашим концентратором и основной сетью.

- РЕДАКТИРОВАНИЕ - Во многих случаях Вам будет нужно сетевое соединение, работающее, пока Вы не доберетесь до определенного момента в Вашей программе, ТОГДА Вы захотите разъединить использование одного из многих предлагаемых предложений.

0
ответ дан Brad Bruce 23 November 2019 в 02:18
поделиться

Самая легкая вещь состояла бы в том, чтобы отбросить Ваше соединение с помощью CurrPorts.

Однако, чтобы к модульному тесту Ваш код обработки исключений, возможно, необходимо рассмотреть абстракцию кода сетевого соединения и записать тупик, насмешку или декоратора, который выдает исключения по требованию. Вы тогда будете в состоянии протестировать логику обработки ошибок приложения, не имея необходимость на самом деле использовать сеть.

0
ответ дан Matt Howells 23 November 2019 в 02:18
поделиться

В зависимости от того, какое программное обеспечение брандмауэра Вы установили/доступны, необходимо быть в состоянии заблокировать исходящий порт и в зависимости от того, как брандмауэр является установкой, это должно просто отбросить пакет запроса на установление соединения. Никакой запрос на установление соединения, никакое соединение, тайм-аут следует. Это, вероятно, работало бы лучше, если бы это было реализовано на уровне маршрутизатора (они имеют тенденцию отбрасывать пакеты вместо того, чтобы отправить сброс, или независимо от того, что эквивалент для ситуации), но там обязан быть пакетом программного обеспечения, который это добилось бы цели также.

0
ответ дан Matthew Scharley 23 November 2019 в 02:18
поделиться

Существует несколько тактики, я раньше в прошлом моделировал сетевые проблемы;

  1. Выходят, сетевой кабель
  2. Выключают переключатель (идеально с переключателем, что компьютер включается в то, чтобы все еще быть приводимым в действие, таким образом, машина поддерживает, это - "сетевое соединение") между Вашей машиной и "целевой" машиной
  3. программное обеспечение брандмауэра Выполнения на целевой машине, которая тихо отбрасывает полученные данные

, Одна из этих идей могла бы дать Вам некоторые средства искусственной генерации сценария, в котором Вы нуждаетесь

0
ответ дан Rob 23 November 2019 в 02:18
поделиться

Включите свой сетевой кабель в переключатель, который не имеет никакого другого соединения/кабелей. Это должно работать, по моему скромному мнению.

0
ответ дан GHad 23 November 2019 в 02:18
поделиться

Несмотря на него не абсолютно ясно, какой OP хочет протестировать: существует различие между попыткой соединения с несуществующим хостом/портом и тайм-аутом уже установленного соединения. Я пошел бы с Rob и ожидал бы, пока соединение не работает, и затем вытяните кабель. Или - для удобства - имеют виртуальную машину, работающую тестовым сервером (с соединенными мостом сетями) и просто деактивация виртуального сетевого интерфейса, как только соединение устанавливается.

1
ответ дан 23 November 2019 в 02:18
поделиться

Вы могли бы установить драйвер Microsoft Loopback, который создаст отдельный интерфейс для Вас. Тогда можно соединиться на нем с некоторым вашим сервисом (собственный хост). Тогда в Сетевых соединениях можно отключить/разрешить такой интерфейс...

1
ответ дан Marcin Gil 23 November 2019 в 02:18
поделиться

Подключение к немаршрутизируемому IP-адресу, например 10.255.255.1.

411
ответ дан 23 November 2019 в 02:18
поделиться

Как насчет программного решения:

Установите SSH-сервер на сервер приложений. Затем используйте туннель сокета для создания связи между вашим локальным портом и удаленным портом на сервере приложений. Для этого вы можете использовать инструменты клиента ssh. Вместо этого пусть ваше клиентское приложение подключается к сопоставленному локальному порту. Затем вы можете по желанию разорвать туннель сокета, чтобы имитировать тайм-аут соединения.

8
ответ дан 23 November 2019 в 02:18
поделиться