Как смоделировать сервер вниз / доступно в Java? - PullRequest
1 голос
/ 31 августа 2011

Наше приложение имеет сторону сервера / клиента. Клиент поддерживает как автономный, так и онлайн режим работы. Поэтому мне нужно проверить клиент, когда сервер не работает, восстановить соединение.

Вопрос приходит. Как смоделировать сервер вниз. Используйте коды для переключения из состояния готовности в состояние готовности или из состояния готовности в состояние «вниз».

Заранее спасибо.

Иосиф


обновление: На самом деле, я не смог расширить интерфейс сервера, чтобы ответить неверным статусом. В моем тестовом сценарии сервер прозрачен. Поэтому неверный порт url + является решением для этого. Но я не мог изменить URL, когда сеанс действителен. Другой способ - изменить файл hosts, чтобы сделать это. Я должен столкнуться с проблемой привилегий в Windows.

Ответы [ 6 ]

2 голосов
/ 31 августа 2011

Зависит от того, что вы подразумеваете под «отключение сервера». Возможные варианты:

  1. Напишите поддельный / фиктивный сервер, который может возвращать сообщения об ошибках, соответствующие отключению в целях тестирования.

  2. Измените IP-адрес сервера, который ищет ваш клиент, на несуществующий, чтобы он считал, что сервер полностью отключен.

1 голос
/ 31 августа 2011

Это зависит от того, где вы тестируете.Если вы проводите модульное тестирование, лучшим вариантом будет макет, предложенный Брайаном Менаром.

Если вы тестируете в интегрированной или производственной среде, вы можете фактически разорвать соединение между вами и сервером.

В зависимости от вашей операционной системы вы можете сделать это несколькими способами.

Для систем на базе Windows Fiddler - это просто фантастика.Вы можете смоделировать практически все, включая задержки запросов и даже просто отбрасывание запросов.Для Windows это не требует административного доступа.

Для систем на основе Linux одна из техник, которые я использовал в прошлом, - это использование прокси-сервера или отключение порта на уровне операционной системы.Вы можете сделать это, используя iptables, например:

Чтобы запретить доступ к определенному порту (в данном случае 25)

/sbin/iptables -I OUTPUT -p tcp --dest 127.0.0.1 --dport 25 -j DROP

и разрешить его снова:

/sbin/iptables --delete OUTPUT 1

Для этого вам понадобятся права суперпользователя, но у него есть то преимущество, что вам не нужно прикасаться к конфигурации вашего сервера или клиента.

1 голос
/ 31 августа 2011

Основная идея состоит в том, чтобы макетировать поведение вашего сервера каким-либо образом. Вы можете использовать насмешливые рамки для этого.

Вы также можете создавать ручные макеты для тестирования. Пусть «прокси» сервера на клиенте реализует этот интерфейс:

public interface IServer
{
    bool foo();
}

Вы можете создать "поддельную" реализацию этого сервера и вернуть все, что захотите

public class FakeOfflineServer implements IServer
{
    public bool foo()
    {
        // throw some exception here.
    }
}

Этот подход позволяет вам подделывать различные сценарии (без подключения к сети, неверные учетные данные и т. Д.)

Вы также можете использовать композицию для переключения сверху вниз в ваших тестах:

public bool FakeServer implements IServer
{
    private IServer offline = new FakeOfflineServer();
    private IServer online = new Server();

    public bool isUp = false;

    private IServer getServer()
    {
        return isUp ? online : offline;
    }

    public bool foo()
    {
        return getServer().foo();
    }
}
1 голос
/ 31 августа 2011

Во время тестирования сервера, укажите неправильный URL-адрес ИЛИ порт (предпочитаемый).Для восстановления укажите правильный URL / порт.

0 голосов
/ 31 августа 2011

Если вы хотите тщательно использовать тесты всегда ближе всего к производственной среде, поместите клиент и серверы на разные машины и обрежьте соединение, а затем восстановите его.

0 голосов
/ 31 августа 2011

Чтобы эмулировать регистр сервера, вы можете написать класс ServerAlwaysDown, расширяющий ваш фактический сервер, но выбрасывающий ServerException (HTTP 500) для каждого соединения.

...