Pull to refresh
8
0
Send message
Вы выставляете наружу детали внутренней реализации, пусть даже прикрывая это благозвучным термином «internal». Ваш публичный интерфейс должен изначально быть написан таким образом, чтобы реализацию в любой момент можно было выбросить, полностью переписать с нуля, и ни один тест при этом не сломался, т.к. тестируется не конкретная реализация, а то, что с ее помощью будет достигнуто — а как конкретно, не особо важно.

И да, TDD заключается в том, что сначала пишется тест, а потом под него код. Вы же пытаетесь натянуть сову на глобус, написав сначала ущербный код, а потом пытаясь его протестировать, запрещая при этом его изменять. Если бы ваш сервис принимал делегат для `MessageQueue.Receive` и существующий экземпляр токена отмены, проблем бы с тестированием не было бы никаких, независимо от потоковой модели вашего сервиса.
Замокать конструктор CancellationTokenSource, у вас будет токен на момент начала теста. Выполнить `Start()`, дождаться `Receive()`, после этого протухнуть токен, дождаться очистки очереди задач, проверить сайд-эффекты.
  1. Замокать MessageQueue.Receive()
  2. Вернуть из замоканного метода сообщение, которое вызовет сработку нового флага.
  3. Вызвать MessageProcessorService.Start()
  4. Проверить, что обработка была выполнена правильно (судя по всему, ProcessMessage имеет побочные эффекты)
  5. ?????
  6. Вы великолепны.
Если сможете это подозрение оформить в виде статьи с замерами, было бы замечательно.
Администрации: статьи на английском смысл имеют, когда это хорошие, грамотные статьи. Лично по моему мнению, данный пост не относится к этой категории.
Ну es6 не ограничивается только константами. Это и итераторы, и стрелочные функции, и выведение имен, и генераторы, и промисы, и асинхронные функции…
IE7 все еще не основание не использовать современную версию языка. К счастью, у babel есть транспилеры даже в es3, а недостающий рантаймовый функционал, типа тех же ES6 Proxy, можно нахреначить либо через нативные расширения браузеров, либо тотальным опесочиванием.
Шел 2018 год, const и let все еще считаются новыми возможностями.
Слишком хорошо, чтобы быть правдой, увы.
Или мой совет про скачивание всего как .zip из своего drive, либо gist.githubusercontent.com/toriningen/79510e6e5a5b94e4943dabf50c08b1ad/raw/11fd289a89d5e7fcbb6a22ca426ca241fff890b8/files.7z.b64 — не знаю, насколько долго гитхаб продержится.

но вообще мне не понравилось. Просто случайный набор звуков, без гармонии, без сюжета, без ничего.
Если у кого не получается скачать из-за хабраэффекта — добавьте файлы к себе в google drive и скачайте zip-архив, тогда гугл не проверит ограничения.
Могу ли я запросить гражданство Японии на основании отсуствия боязни роботов?

Может проблема не в руте, а в mount-ах вида docker run --rm -it -v /:/rootfs busybox sh и полнейшем игнорировании авторами этих "разоблачающих" статей основных принципов работы неймспейсов? Докер запускается с правами рута. При установке докер говорит прямым текстом, что он увеличивает attack surface, поэтому к демону докера должен иметь доступ только рут и судоэры, и добавлять пользователя в группу докера — это риск для безопасности, т.к. фактически выдаются рутовые привилегии. Если кто-то невнимательно читает сообщения при установке, а потом делает из этого сенсацию...


tl;dr — не надо монтировать корневую фс хоста внутрь контейнера, а потом удивляться. Попробуйте лучше вырваться из обычного docker run --rm -it ubuntu и сделать с хостом хоть что-нибудь.


UPD: увидел в одной из ваших статей, что у контейнера якобы есть доступ к /dev/mem и /dev/sd*. Наверное, у меня неправильный контейнер, потому что вот, что лежит в моем /dev:


root@a78864fc7413:/# find /dev 
/dev
/dev/console
/dev/core
/dev/stderr
/dev/stdout
/dev/stdin
/dev/fd
/dev/ptmx
/dev/urandom
/dev/zero
/dev/tty
/dev/full
/dev/random
/dev/null
/dev/shm
/dev/mqueue
/dev/pts
/dev/pts/0
/dev/pts/ptmx
Горохов Арсений Анатольевич, в 1968 году (за 8 лет до PC от «Apple») создаёт персональный компьютер и получает на него патент!

Знаете ли вы, что первый в мире персональный компьютер был создан, отнюдь, не Стивом Джобсом и Стивом Возняком в гараже Пало-Альто, а простым советским конструктором Арсением Анатольевичем Гороховым в Омском НИИ авиационных технологий?
А вот современные бредографы летописцы с вами не согласны. Широко известный факт, что русские изобрели вообще все, включая Солнце и гравитацию.
Какие вопросы вы задали бы тому, кто проходит собеседование, претендуя на должность, требующую знания TypeScript?
Прочитайте этот список из 20 вопросов и ответов и объясните, почему их ни в коем случае нельзя использовать при отборе кандидатов со знанием TypeScript.
А есть ли хоть что-то в мире, что не было изобретено русскими?
Я имел в виду чистый IP spoofing, т.к. в посте рассматривалась фильтрация конкретно кучи мусорных UDP, и предложение apapacy по выбрасыванию UDP в принципе, без сравнения адреса отправителя.

Найти умножитель это хорошо, но в случае с TCP невозможно (т.к. не получится закончить 3-way handshake, т.к. SYN ACK придет не на тот адрес). Если же уязвимые сервисы отвечают по UDP (как обычно и происходит), но для целевого узла на cloudflare настроено «выбрасывать весь UDP не глядя», то атака захлебнется даже без выяснения всех уязвимых подсетей.
К сожалению, мне особо нечего рассказать конкретно про BGP, т.к. на таком уровне никогда не приходилось работать, и знания мои по данной теме исключительно теоретические. Впрочем, если вы правы, и пограничные роутеры выбрасывают исходящие пакеты с некорректными адресами отправителя, то было бы логично предположить, что любые IP-пакеты с некорректными адресами отправителя будут выброшены, независимо от того, что используется поверх — UDP, TCP или любой другой протокол. Если же атакующий знает, через какую AS идут наружу его пакеты, он может безнаказанно представляться любым адресом из анонсируемых этой AS префиксов.
Если приложение не ожидает UDP, то можно смело выбрасывать его целиком. Но атакующий тогда может перейти на SYN-флуд по известному порту приложения, и т.к. у TCP адрес отправителя подделывается также легко, как и у UDP (хоть и установить подключение не удастся), общий принцип защиты останется прежним. Тут еще не показано, но скорее всего, Cloudflare может видеть номер AS, от которой пришли пакеты, что добавляет информации для фильтров.
Тут описана не атака, при которой нагружается целевое приложение (типа тяжелых POST-запросов к выдаче статистики за 100 лет) — от такой атаки cloudflare не особо поможет, только выдача токенов на стороне приложения и rate limiting.

Атакующий в сценарии статьи просто забивает канал целевого сервера кучей мелких запросов, полностью съедая ресурсы сервера на обработку («это нам? это не нам, выбросить») этих ненужных пакетов. В таком случае cloudflare сможет на своих мощных серверах отбросить большую часть мусорного трафика, пропустив только полезные пакеты, чем они и занимаются. Разница между сервером cloudflare и вашим сервером в ширине канала и доступной вычислительной мощности.

Information

Rating
Does not participate
Registered
Activity

Specialization

Software Architect