Как моделировать отказ сети в тестовых целях (в C#)?

Это то, что я делаю для своих нужд. Где мне нужно отправить данные входа в API в виде данных формы, а объект Javascript (userData) автоматически преобразуется в URL-кодированные данные

        var deferred = $q.defer();
        $http({
            method: 'POST',
            url: apiserver + '/authenticate',
            headers: { 'Content-Type': 'application/x-www-form-urlencoded' },
            transformRequest: function (obj) {
                var str = [];
                for (var p in obj)
                    str.push(encodeURIComponent(p) + "=" + encodeURIComponent(obj[p]));
                return str.join("&");
            },
            data: userData
        }).success(function (response) {
            //logics
            deferred.resolve(response);
        }).error(function (err, status) {
           deferred.reject(err);
        });

Это как мои Userdata

var userData = {
                grant_type: 'password',
                username: loginData.userName,
                password: loginData.password
            }
24
задан Larsenal 23 January 2009 в 22:16
поделиться

9 ответов

В настоящее время я просто "отключаю" сеть путем установки поддельного статического IP следующим образом:

using System.Management;

class NetworkController
{

    public static void Disable()
    {
        SetIP("192.168.0.4", "255.255.255.0");
    }

    public static void Enable()
    {
        SetDHCP();
    }


    private static void SetIP(string ip_address, string subnet_mask)
    {
        ManagementClass objMC = new ManagementClass("Win32_NetworkAdapterConfiguration");
        ManagementObjectCollection objMOC = objMC.GetInstances();

        foreach (ManagementObject objMO in objMOC) {
            if ((bool)objMO("IPEnabled")) {
                try {
                    ManagementBaseObject setIP = default(ManagementBaseObject);
                    ManagementBaseObject newIP = objMO.GetMethodParameters("EnableStatic");

                    newIP("IPAddress") = new string[] { ip_address };
                    newIP("SubnetMask") = new string[] { subnet_mask };

                    setIP = objMO.InvokeMethod("EnableStatic", newIP, null);
                }
                catch (Exception generatedExceptionName) {
                    throw;
                }
            }


        }
    }

    private static void SetDHCP()
    {
        ManagementClass mc = new ManagementClass("Win32_NetworkAdapterConfiguration");
        ManagementObjectCollection moc = mc.GetInstances();

        foreach (ManagementObject mo in moc) {
            // Make sure this is a IP enabled device. Not something like memory card or VM Ware
            if ((bool)mo("IPEnabled")) {
                ManagementBaseObject newDNS = mo.GetMethodParameters("SetDNSServerSearchOrder");
                newDNS("DNSServerSearchOrder") = null;
                ManagementBaseObject enableDHCP = mo.InvokeMethod("EnableDHCP", null, null);
                ManagementBaseObject setDNS = mo.InvokeMethod("SetDNSServerSearchOrder", newDNS, null);
            }
        }
    }
}
11
ответ дан Larsenal 28 November 2019 в 23:45
поделиться

Запишите обертку в класс возможности соединения класса сети, который Вы используете (например, WebClient) с двухпозиционным переключателем:)

Или что, или блок Ваше приложение в брандмауэре.

5
ответ дан Andrew Rollings 28 November 2019 в 23:45
поделиться

Если Вы попробуете отключение электричества полной сети за свое приложение, отключающее сетевой кабель, то будет работать. Иногда у Вас мог бы быть уровень доступа к данным с несколькими источниками данных (на различных машинах), в этом случае, можно моделировать исключение в тестах с Ложной Платформой как Насмешки Носорога. Вот некоторый псевдокод, который Вы можете иметь в своем тесте

void TestUserDBFailure()
{
    // ***** THIS IS PSEUDO-CODE *******
    //setting up the stage - retrieval of the user info create an exception
    Expect.Call(_userRepository.GetUser(null))
       .IgnoreArguments()
       .Return(new Exception());

    // Call that uses the getuser function, see how it reacts
    User selectedUser = _dataLoader.GetUserData("testuser", "password");        
}
5
ответ дан Rorzilla 28 November 2019 в 23:45
поделиться

Попытайтесь блокировать соединение с брандмауэром на полпути через сессию, возможно?

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

Редактирование : Выполните сценарий, который поворачивает Сетевой адаптер вкл\выкл случайным образом или в интервалах набора?

4
ответ дан Mostlyharmless 28 November 2019 в 23:45
поделиться

Существует инструмент, который можно использовать для моделирования Высокой Задержки и Низкой Пропускной способности в Тестировании Приложений базы данных, как объяснено в этом запись в блоге .

2
ответ дан Gulzar Nazim 28 November 2019 в 23:45
поделиться

Ищите средство моделирования WAN, которое позволит Вам ограничивать пропускную способность (и отключать ее полностью) я всегда нахожу интересным видеть, как пользовательский опыт изменяется, когда мои приложения запущены в ограниченной среде пропускной способности. Посмотрите здесь для некоторой информации.

2
ответ дан Jim Blizard 28 November 2019 в 23:45
поделиться

Вероятно, не полезный для моделирования "реальных" сетевых проблем, но Вы могли просто указать на свою строку соединения с БД на несуществующую машину в то время как в рамках Вашего теста.

2
ответ дан JeffK 28 November 2019 в 23:45
поделиться

Зависит, на какой конкретной сетевой проблеме Вы хотите моделировать. Для большинства людей это столь же просто как "сервер, недостижимый", в этом случае Вы просто попытались бы соединиться с не существующим сервером. Будьте осторожны, тем не менее, потому что Вы хотите что-то, что routable, но не отвечает. Попытка соединиться с dkjdsjk.com сразу перестанет работать (поиск DNS), но пытающийся соединиться с www.google.com:1433 (вероятно), испытает таймаут из-за брандмауэра - который является, как Ваше приложение будет вести себя, когда Ваш сервер БД снизится.

2
ответ дан Mark Brackett 28 November 2019 в 23:45
поделиться

Используйте фиктивные объекты для создания настраиваемых, непрочных версий реальной вещи - в этом случае, база данных.

0
ответ дан Rob Williams 28 November 2019 в 23:45
поделиться
Другие вопросы по тегам:

Похожие вопросы: