/*----------------------------------------------------------------------------*/ /* Copyright (c) 2018 FIRST. All Rights Reserved. */ /* Open Source Software - may be modified and shared by FRC teams. The code */ /* must be accompanied by the FIRST BSD license file in the root directory of */ /* the project. */ /*----------------------------------------------------------------------------*/ #pragma once #include #include #include #include "gtest/gtest.h" #include "wpi/ArrayRef.h" #include "wpi/uv/Loop.h" #include "wpi/uv/Pipe.h" #include "wpi/uv/Timer.h" namespace wpi { class WebSocketTest : public ::testing::Test { public: static const char* pipeName; static void SetUpTestCase(); WebSocketTest() { loop = uv::Loop::Create(); clientPipe = uv::Pipe::Create(loop); serverPipe = uv::Pipe::Create(loop); serverPipe->Bind(pipeName); #if 0 auto debugTimer = uv::Timer::Create(loop); debugTimer->timeout.connect([this] { std::printf("Active handles:\n"); uv_print_active_handles(loop->GetRaw(), stdout); }); debugTimer->Start(uv::Timer::Time{100}, uv::Timer::Time{100}); debugTimer->Unreference(); #endif auto failTimer = uv::Timer::Create(loop); failTimer->timeout.connect([this] { loop->Stop(); FAIL() << "loop failed to terminate"; }); failTimer->Start(uv::Timer::Time{1000}); failTimer->Unreference(); } ~WebSocketTest() { Finish(); } void Finish() { loop->Walk([](uv::Handle& it) { it.Close(); }); } static std::vector BuildHeader(uint8_t opcode, bool fin, bool masking, uint64_t len); static std::vector BuildMessage(uint8_t opcode, bool fin, bool masking, ArrayRef data); static void AdjustMasking(MutableArrayRef message); static const uint8_t testMask[4]; std::shared_ptr loop; std::shared_ptr clientPipe; std::shared_ptr serverPipe; }; } // namespace wpi