LINUX.ORG.RU

Сообщения unittests

 

Проблемы с поднятием сети в связке Proxmox + VirtualBox/VmWare + Openwswitch

Добрый день!

есть: Proxmox on VirtualBox/VmWare с кое как настроенным Openvswitch.

Конфигурация Virtualbox:

network:

  • Bridged Adapter:
    • enp4s0
    • Promiscuous Mode - Allow All

/etc/network/interfaces

auto lo
iface lo inet loopback

auto vmbr1
allow-ovs vmbr1
iface vmbr1 inet static
	address  <ipv4>
	netmask  <mask>
	gateway  <ipv4>
	ovs_type OVSBridge
	ovs_ports enp0s3 vlan2 vlan5 vlan3

auto enp0s3
allow-vmbr1 enp0s3
iface enp0s3 inet manual
	ovs_type OVSPort
	ovs_bridge vmbr1

allow-vmbr1 vlan2
iface vlan2 inet static
	address  192.168.2.5
	netmask  255.255.255.0
	gateway 192.168.2.1
	ovs_type OVSIntPort
	ovs_bridge vmbr1
	ovs_extra set interface ${IFACE} external-ids:iface-id=$(hostname -s)-${IFACE}-vif
	ovs_options tag=2

allow-vmbr1 vlan5
iface vlan5 inet static
	address  192.168.5.5
	netmask  255.255.255.0
	gateway 192.168.5.1
	ovs_type OVSIntPort
	ovs_bridge vmbr1
	ovs_extra set interface ${IFACE} external-ids:iface-id=$(hostname -s)-${IFACE}-vif
	ovs_options tag=5


allow-vmbr1 vlan3
iface vlan3 inet static
	address  192.168.3.5
	netmask  255.255.255.0
	gateway 192.168.3.1
	ovs_type OVSIntPort
	ovs_bridge vmbr1
	ovs_extra set interface ${IFACE} external-ids:iface-id=$(hostname -s)-${IFACE}-vif
	ovs_options tag=3

в логах:

-- The start-up result is done.
Jan 24 12:17:14 pve openvswitch-switch[959]: /etc/openvswitch/conf.db does not exist ... (warning).
Jan 24 12:17:15 pve openvswitch-switch[959]: Creating empty database /etc/openvswitch/conf.db.
Jan 24 12:17:15 pve openvswitch-switch[959]: Starting ovsdb-server.
Jan 24 12:17:15 pve ovs-vsctl[1090]: ovs|00001|vsctl|INFO|Called as ovs-vsctl --no-wait -- init -- set Open_vSwitch . db-version=7.14.0
Jan 24 12:17:15 pve ovs-vsctl[1097]: ovs|00001|vsctl|INFO|Called as ovs-vsctl --no-wait set Open_vSwitch . ovs-version=2.6.2 "external-ids:system-id=\"05057ea9-cdab-40d5-aafe-29801f72d890
Jan 24 12:17:15 pve openvswitch-switch[959]: Configuring Open vSwitch system IDs.
Jan 24 12:17:15 pve openvswitch-switch[959]: Starting ovs-vswitchd.
Jan 24 12:17:15 pve openvswitch-switch[959]: Enabling remote OVSDB managers.
Jan 24 12:17:15 pve openvswitch-switch[959]: ifup: waiting for lock on /run/network/ifstate.vmbr1
Jan 24 12:17:44 pve systemd[1]: networking.service: Start operation timed out. Terminating.
Jan 24 12:17:44 pve openvswitch-switch[959]: ifup: interface vmbr1 already configured
Jan 24 12:17:44 pve ifup[892]: Starting openvswitch-switch (via systemctl): openvswitch-switch.service
Jan 24 12:17:44 pve systemd[1]: networking.service: Main process exited, code=killed, status=15/TERM
Jan 24 12:17:44 pve systemd[1]: Failed to start Raise network interfaces.

systemctl status networking.service

-- Unit networking.service has failed.
root@pve:~# systemctl status networking.service
● networking.service - Raise network interfaces
   Loaded: loaded (/lib/systemd/system/networking.service; enabled; vendor preset: enabled)
   Active: failed (Result: timeout) since Fri 2020-01-24 12:17:44 MSK; 10min ago
     Docs: man:interfaces(5)
  Process: 892 ExecStart=/sbin/ifup -a --read-environment (code=killed, signal=TERM)
  Process: 880 ExecStartPre=/bin/sh -c [ "$CONFIGURE_INTERFACES" != "no" ] && [ -n "$(ifquery --read-environment --list --exclude=lo)" ] && udevadm settle (code=exited, status=0/SUCCESS)
 Main PID: 892 (code=killed, signal=TERM)
      CPU: 49ms

в ручную поднимается:

ifdown vmbr1 && ifup vmbr1

естественно, до первой перезагрузки.

Вопрос:

Как побороть?

P.S.

уменьшил таймаут для поднятия сетки с 5 мин до 30 сек.

Делал бридж vmbr1: hotplug - тогда не поднимается через ifdown vmbr1 && ifup vmbr1

 , ,

unittests
()

Простой вопрос по C++ multithreading

Доброго времени суток, форумчане. Всем добра.

Набросал простой многопоточный код http://cpp.sh/8jtuk
Но не ожидал увидеть вот такое:

thread: 2 start
thread: 2 end
thread: 1 join
thread: 3 start
thread: 3 end
thread: 1 start
thread: 1 end
thread: 2 join
thread: 3 join

Скорее всего проблема в буферизации вывода. Но я вроде и мютексом обернул и flush дернул.

Спасибо всем кто объяснит, что я делаю не так с выводом на экран.

 ,

unittests
()

Вопрос по proxygen от facebook

Добрый день, друзья.

Читаю потихоньку о фреймворке proxygen от facebook.
И сразу же возник вопрос, для каких целей в EchoServer.cpp сервер стартует в отдельном потоке, если текущий поток запускает нить с join?

Т.е. зачем нам создавать отдельный поток, если текущий поток будет спать и ждать когда сервер завершится?

 HTTPServer server(std::move(options));
  server.bind(IPs);

  // Start HTTPServer mainloop in a separate thread
  std::thread t([&] () {
    server.start();
  });

  t.join();

 , ,

unittests
()

Пакетные менеджеры c++

Доброго вечера, граждане и гражданки.

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

В проекте стандартно CMake, библиотека логирования, unit тесты Catch2.

логгирование,unit тесты - лежат хедерами в каталоге include.
Все собирается по хипстерски в docker контейнере, модно-молодежно.
Из пакетных менеджеров работал не много с cargo(привет Rust) и с stack (haskell).

Возникли вопросы следующего характера:

  • На какие проекты (по размеру) нужно тащить пакетный менеджер?
  • Если не нужна кроссплатформенность то хватит простых apt install <пакет с библиотекой> + CMake find_package?
  • Какие признаки, что пора использовать пакетный менеджер?

На хабре есть статья, но тут больше про настройку и проблемы windows.

 

unittests
()

Кошерные unit тесты

Добрый день, форумчане и уважаемые анонимусы.

Есть код:

class Statistics
{
};

class Validate{
    public:
    virtual bool IsValid( Statistics & statistics) {return false; }
};
    

class Protocol{
    protected:
    Validate* validate;
    public:
    virtual bool ValidateTheOutput(const std::string& output, Statistics & statistics, std::string& message) const = 0;
};

class SomeProtocol: public Protocol {    
    public:
    virtual bool ValidateTheOutput(const std::string& output, Statistics & statistics, std::string& message) const override
    {
        // собираем статистику
        // ....
        return validate->IsValid(statistics);
    }
};

требуется покрыть код unit тестами.

Вопрос как правильно проверить ValidateTheOutput?
В часности, как проверять:
return validate->Isvalid(statistics);

Чтобы не скатиться в функциональное тестирование.

Второй вопрос, как вы покрываете тестами приватные методы? Наследование?

 , ,

unittests
()

RSS подписка на новые темы