diff --git a/collector/lib/CollectorOutput.cpp b/collector/lib/CollectorOutput.cpp index 6ac9392caa..a315cda020 100644 --- a/collector/lib/CollectorOutput.cpp +++ b/collector/lib/CollectorOutput.cpp @@ -1,7 +1,5 @@ #include "CollectorOutput.h" -#include "internalapi/sensor/collector_iservice.pb.h" - #include "GRPCUtil.h" #include "HostInfo.h" @@ -40,7 +38,7 @@ void CollectorOutput::HandleOutputError() { stream_interrupted_.notify_one(); } -SignalHandler::Result CollectorOutput::SensorOutput(const sensor::MsgFromCollector& msg) { +SignalHandler::Result CollectorOutput::SensorOutput(const sensor::ProcessSignal& msg) { for (auto& client : sensor_clients_) { auto res = client->SendMsg(msg); switch (res) { @@ -83,7 +81,7 @@ SignalHandler::Result CollectorOutput::SignalOutput(const sensor::SignalStreamMe SignalHandler::Result CollectorOutput::SendMsg(const MessageType& msg) { auto visitor = [this](auto&& m) { using T = std::decay_t; - if constexpr (std::is_same_v) { + if constexpr (std::is_same_v) { return SensorOutput(m); } else if constexpr (std::is_same_v) { return SignalOutput(m); diff --git a/collector/lib/CollectorOutput.h b/collector/lib/CollectorOutput.h index 1546c29ee2..ebb3309e30 100644 --- a/collector/lib/CollectorOutput.h +++ b/collector/lib/CollectorOutput.h @@ -2,7 +2,6 @@ #include -#include "internalapi/sensor/collector_iservice.pb.h" #include "internalapi/sensor/signal_iservice.pb.h" #include "CollectorConfig.h" @@ -13,7 +12,7 @@ namespace collector { -using MessageType = std::variant; +using MessageType = std::variant; class CollectorOutput { public: @@ -62,7 +61,7 @@ class CollectorOutput { bool EstablishGrpcStreamSingle(); void HandleOutputError(); - SignalHandler::Result SensorOutput(const sensor::MsgFromCollector& msg); + SignalHandler::Result SensorOutput(const sensor::ProcessSignal& msg); SignalHandler::Result SignalOutput(const sensor::SignalStreamMessage& msg); std::vector> sensor_clients_; diff --git a/collector/lib/ProcessSignalHandler.cpp b/collector/lib/ProcessSignalHandler.cpp index f48fd0871b..3635c62a14 100644 --- a/collector/lib/ProcessSignalHandler.cpp +++ b/collector/lib/ProcessSignalHandler.cpp @@ -104,9 +104,9 @@ SignalHandler::Result ProcessSignalHandler::HandleSensorSignal(sinsp_evt* evt) { return IGNORED; } - dtrace_probe(signal_msg->process_signal()); + dtrace_probe(*signal_msg); - if (!rate_limiter_.Allow(compute_process_key(signal_msg->process_signal()))) { + if (!rate_limiter_.Allow(compute_process_key(*signal_msg))) { ++(stats_->nProcessRateLimitCount); return IGNORED; } @@ -128,7 +128,7 @@ SignalHandler::Result ProcessSignalHandler::HandleExistingProcessSensor(sinsp_th return IGNORED; } - if (!rate_limiter_.Allow(compute_process_key(signal_msg->process_signal()))) { + if (!rate_limiter_.Allow(compute_process_key(*signal_msg))) { ++(stats_->nProcessRateLimitCount); return IGNORED; } diff --git a/collector/lib/SensorClient.cpp b/collector/lib/SensorClient.cpp index 3420162ec2..2d3a7f21be 100644 --- a/collector/lib/SensorClient.cpp +++ b/collector/lib/SensorClient.cpp @@ -5,7 +5,7 @@ namespace collector { bool SensorClient::Recreate() { context_ = std::make_unique(); - writer_ = DuplexClient::CreateWithReadsIgnored(&sensor::CollectorService::Stub::AsyncCommunicate, channel_, context_.get()); + writer_ = DuplexClient::CreateWithReadsIgnored(&sensor::CollectorService::Stub::AsyncPushProcesses, channel_, context_.get()); if (!writer_->WaitUntilStarted(std::chrono::seconds(30))) { CLOG(ERROR) << "Signal stream not ready after 30 seconds. Retrying ..."; CLOG(ERROR) << "Error message: " << writer_->FinishNow().error_message(); @@ -18,14 +18,14 @@ bool SensorClient::Recreate() { return true; } -SignalHandler::Result SensorClient::SendMsg(const sensor::MsgFromCollector& msg) { +SignalHandler::Result SensorClient::SendMsg(const sensor::ProcessSignal& msg) { if (!stream_active_.load(std::memory_order_acquire)) { CLOG_THROTTLED(ERROR, std::chrono::seconds(10)) << "GRPC stream is not established"; return SignalHandler::ERROR; } - if (first_write_ && msg.has_process_signal()) { + if (first_write_) { first_write_ = false; return SignalHandler::NEEDS_REFRESH; } diff --git a/collector/lib/SensorClient.h b/collector/lib/SensorClient.h index 2c04ed3fd2..f5bebdac85 100644 --- a/collector/lib/SensorClient.h +++ b/collector/lib/SensorClient.h @@ -5,7 +5,6 @@ #include #include "internalapi/sensor/collector_iservice.grpc.pb.h" -#include "internalapi/sensor/collector_iservice.pb.h" #include "DuplexGRPC.h" #include "SignalHandler.h" @@ -39,7 +38,7 @@ class ISensorClient { * @returns A SignalHandler::Result with the outcome of the send * operation. */ - virtual SignalHandler::Result SendMsg(const sensor::MsgFromCollector& msg) = 0; + virtual SignalHandler::Result SendMsg(const sensor::ProcessSignal& msg) = 0; }; class SensorClient : public ISensorClient { @@ -60,7 +59,7 @@ class SensorClient : public ISensorClient { bool Recreate() override; - SignalHandler::Result SendMsg(const sensor::MsgFromCollector& msg) override; + SignalHandler::Result SendMsg(const sensor::ProcessSignal& msg) override; private: std::shared_ptr channel_; @@ -69,7 +68,7 @@ class SensorClient : public ISensorClient { // This needs to have the same lifetime as the class. std::unique_ptr context_; - std::unique_ptr> writer_; + std::unique_ptr> writer_; bool first_write_ = false; }; @@ -77,7 +76,7 @@ class SensorClient : public ISensorClient { class SensorClientStdout : public ISensorClient { bool Recreate() override { return true; } - SignalHandler::Result SendMsg(const sensor::MsgFromCollector& msg) override { + SignalHandler::Result SendMsg(const sensor::ProcessSignal& msg) override { LogProtobufMessage(msg); return SignalHandler::PROCESSED; } diff --git a/collector/lib/SensorClientFormatter.cpp b/collector/lib/SensorClientFormatter.cpp index a0756f77f5..c7b6f27e1d 100644 --- a/collector/lib/SensorClientFormatter.cpp +++ b/collector/lib/SensorClientFormatter.cpp @@ -4,7 +4,7 @@ #include -#include "internalapi/sensor/collector_iservice.pb.h" +#include "internalapi/sensor/collector.pb.h" #include "internalapi/sensor/signal_iservice.pb.h" #include "CollectorStats.h" @@ -67,7 +67,7 @@ SensorClientFormatter::SensorClientFormatter(sinsp* inspector, const CollectorCo SensorClientFormatter::~SensorClientFormatter() = default; -const sensor::MsgFromCollector* SensorClientFormatter::ToProtoMessage(sinsp_evt* event) { +const sensor::ProcessSignal* SensorClientFormatter::ToProtoMessage(sinsp_evt* event) { if (process_signals[event->get_type()] == ProcessSignalType::UNKNOWN_PROCESS_TYPE) { return nullptr; } @@ -79,39 +79,21 @@ const sensor::MsgFromCollector* SensorClientFormatter::ToProtoMessage(sinsp_evt* return nullptr; } - ProcessSignal* process_signal = CreateProcessSignal(event); - if (process_signal == nullptr) { - return nullptr; - } - - auto* msg = AllocateRoot(); - msg->clear_info(); - msg->clear_register_(); - msg->set_allocated_process_signal(process_signal); - return msg; + return CreateProcessSignal(event); } -const sensor::MsgFromCollector* SensorClientFormatter::ToProtoMessage(sinsp_threadinfo* tinfo) { +const sensor::ProcessSignal* SensorClientFormatter::ToProtoMessage(sinsp_threadinfo* tinfo) { Reset(); if (!ValidateProcessDetails(tinfo)) { CLOG(INFO) << "Dropping process event: " << tinfo; return nullptr; } - ProcessSignal* signal = CreateProcessSignal(tinfo); - if (signal == nullptr) { - return nullptr; - } - - auto* msg = AllocateRoot(); - msg->clear_register_(); - msg->clear_info(); - msg->set_allocated_process_signal(signal); - return msg; + return CreateProcessSignal(tinfo); } ProcessSignal* SensorClientFormatter::CreateProcessSignal(sinsp_evt* event) { - auto signal = Allocate(); + auto signal = AllocateRoot(); // set id signal->set_id(UUIDStr()); @@ -193,7 +175,7 @@ ProcessSignal* SensorClientFormatter::CreateProcessSignal(sinsp_evt* event) { } ProcessSignal* SensorClientFormatter::CreateProcessSignal(sinsp_threadinfo* tinfo) { - auto signal = Allocate(); + auto signal = AllocateRoot(); // set id signal->set_id(UUIDStr()); diff --git a/collector/lib/SensorClientFormatter.h b/collector/lib/SensorClientFormatter.h index 56b3085545..d518242e94 100644 --- a/collector/lib/SensorClientFormatter.h +++ b/collector/lib/SensorClientFormatter.h @@ -5,7 +5,6 @@ #include #include "api/v1/signal.pb.h" -#include "internalapi/sensor/collector_iservice.pb.h" #include "CollectorConfig.h" #include "ContainerMetadata.h" @@ -22,7 +21,7 @@ class EventExtractor; namespace collector { -class SensorClientFormatter : public ProtoSignalFormatter { +class SensorClientFormatter : public ProtoSignalFormatter { public: SensorClientFormatter(const SensorClientFormatter&) = delete; SensorClientFormatter(SensorClientFormatter&&) = delete; @@ -35,10 +34,9 @@ class SensorClientFormatter : public ProtoSignalFormatter #include -#include "internalapi/sensor/collector_iservice.pb.h" - #include "CollectorOutput.h" #include "SensorClient.h" #include "SignalServiceClient.h" @@ -11,7 +9,7 @@ namespace collector { class MockSensorClient : public ISensorClient { public: MOCK_METHOD(bool, Recreate, ()); - MOCK_METHOD(SignalHandler::Result, SendMsg, (const sensor::MsgFromCollector&)); + MOCK_METHOD(SignalHandler::Result, SendMsg, (const sensor::ProcessSignal&)); }; class MockSignalClient : public ISignalServiceClient { @@ -32,7 +30,7 @@ class CollectorOutputTest : public testing::Test { }; TEST_F(CollectorOutputTest, SensorClient) { - sensor::MsgFromCollector msg; + sensor::ProcessSignal msg; EXPECT_CALL(*sensor_client, SendMsg).Times(1).WillOnce(testing::Return(SignalHandler::PROCESSED)); diff --git a/integration-tests/go.mod b/integration-tests/go.mod index 5f3e7ad325..bce8a0ed5c 100644 --- a/integration-tests/go.mod +++ b/integration-tests/go.mod @@ -16,10 +16,10 @@ require ( github.com/stackrox/rox v0.0.0-20210914215712-9ac265932e28 github.com/stretchr/testify v1.10.0 github.com/thoas/go-funk v0.9.3 - go.opentelemetry.io/otel/trace v1.34.0 + go.opentelemetry.io/otel/trace v1.35.0 golang.org/x/exp v0.0.0-20241217172543-b2144cdd0a67 - golang.org/x/sys v0.31.0 - google.golang.org/grpc v1.71.0 + golang.org/x/sys v0.32.0 + google.golang.org/grpc v1.71.1 gopkg.in/yaml.v3 v3.0.1 k8s.io/api v0.32.3 k8s.io/apimachinery v0.32.3 @@ -46,7 +46,7 @@ require ( github.com/go-logr/stdr v1.2.2 // indirect github.com/go-openapi/jsonpointer v0.21.0 // indirect github.com/go-openapi/jsonreference v0.21.0 // indirect - github.com/go-openapi/swag v0.23.0 // indirect + github.com/go-openapi/swag v0.23.1 // indirect github.com/gogo/protobuf v1.3.2 // indirect github.com/golang/protobuf v1.5.4 // indirect github.com/gonum/blas v0.0.0-20181208220705-f22b278b28ac // indirect @@ -67,7 +67,6 @@ require ( github.com/inconshreveable/mousetrap v1.1.0 // indirect github.com/josharian/intern v1.0.0 // indirect github.com/json-iterator/go v1.1.12 // indirect - github.com/klauspost/compress v1.18.0 // indirect github.com/mailru/easyjson v0.9.0 // indirect github.com/mitchellh/go-wordwrap v1.0.1 // indirect github.com/moby/docker-image-spec v1.3.1 // indirect @@ -81,7 +80,7 @@ require ( github.com/opencontainers/image-spec v1.1.1 // indirect github.com/planetscale/vtprotobuf v0.6.1-0.20240409071808-615f978279ca // indirect github.com/pmezard/go-difflib v1.0.1-0.20181226105442-5d4384ee4fb2 // indirect - github.com/prometheus/client_golang v1.21.1 // indirect + github.com/prometheus/client_golang v1.22.0 // indirect github.com/prometheus/client_model v0.6.1 // indirect github.com/prometheus/procfs v0.15.1 // indirect github.com/sirupsen/logrus v1.9.3 // indirect @@ -93,24 +92,24 @@ require ( go.opentelemetry.io/auto/sdk v1.1.0 // indirect go.opentelemetry.io/contrib/instrumentation/google.golang.org/grpc/otelgrpc v0.59.0 // indirect go.opentelemetry.io/contrib/instrumentation/net/http/otelhttp v0.59.0 // indirect - go.opentelemetry.io/otel v1.34.0 // indirect + go.opentelemetry.io/otel v1.35.0 // indirect go.opentelemetry.io/otel/exporters/otlp/otlptrace v1.32.0 // indirect go.opentelemetry.io/otel/exporters/otlp/otlptrace/otlptracegrpc v1.32.0 // indirect go.opentelemetry.io/otel/exporters/otlp/otlptrace/otlptracehttp v1.28.0 // indirect - go.opentelemetry.io/otel/metric v1.34.0 // indirect - go.opentelemetry.io/otel/sdk v1.34.0 // indirect + go.opentelemetry.io/otel/metric v1.35.0 // indirect + go.opentelemetry.io/otel/sdk v1.35.0 // indirect go.opentelemetry.io/proto/otlp v1.3.1 // indirect go.uber.org/atomic v1.11.0 // indirect go.uber.org/multierr v1.11.0 // indirect go.uber.org/zap v1.27.0 // indirect - golang.org/x/net v0.37.0 // indirect - golang.org/x/oauth2 v0.28.0 // indirect - golang.org/x/term v0.30.0 // indirect - golang.org/x/text v0.23.0 // indirect + golang.org/x/net v0.39.0 // indirect + golang.org/x/oauth2 v0.29.0 // indirect + golang.org/x/term v0.31.0 // indirect + golang.org/x/text v0.24.0 // indirect golang.org/x/time v0.11.0 // indirect google.golang.org/genproto/googleapis/api v0.0.0-20250303144028-a0af3efb3deb // indirect google.golang.org/genproto/googleapis/rpc v0.0.0-20250313205543-e70fdf4c4cb4 // indirect - google.golang.org/protobuf v1.36.5 // indirect + google.golang.org/protobuf v1.36.6 // indirect gopkg.in/evanphx/json-patch.v4 v4.12.0 // indirect gopkg.in/inf.v0 v0.9.1 // indirect gopkg.in/natefinch/lumberjack.v2 v2.2.1 // indirect @@ -129,7 +128,7 @@ replace ( github.com/fullsailor/pkcs7 => github.com/stackrox/pkcs7 v0.0.0-20220914154527-cfdb0aa47179 github.com/heroku/docker-registry-client => github.com/stackrox/docker-registry-client v0.0.0-20230714151239-78b1f5f70b8a github.com/operator-framework/helm-operator-plugins => github.com/stackrox/helm-operator v0.0.10-0.20220919093109-89f9785764c6 - github.com/stackrox/rox => github.com/stackrox/stackrox v0.0.0-20250325114232-8e68c6a26ed1 + github.com/stackrox/rox => github.com/stackrox/stackrox v0.0.0-20250415091607-159cf2aea233 go.uber.org/zap => github.com/stackrox/zap v1.18.2-0.20240314134248-5f932edd0404 ) diff --git a/integration-tests/go.sum b/integration-tests/go.sum index 046f56564e..6b133c81f9 100644 --- a/integration-tests/go.sum +++ b/integration-tests/go.sum @@ -50,8 +50,8 @@ github.com/go-openapi/jsonpointer v0.21.0 h1:YgdVicSA9vH5RiHs9TZW5oyafXZFc6+2Vc1 github.com/go-openapi/jsonpointer v0.21.0/go.mod h1:IUyH9l/+uyhIYQ/PXVA41Rexl+kOkAPDdXEYns6fzUY= github.com/go-openapi/jsonreference v0.21.0 h1:Rs+Y7hSXT83Jacb7kFyjn4ijOuVGSvOdF2+tg1TRrwQ= github.com/go-openapi/jsonreference v0.21.0/go.mod h1:LmZmgsrTkVg9LG4EaHeY8cBDslNPMo06cago5JNLkm4= -github.com/go-openapi/swag v0.23.0 h1:vsEVJDUo2hPJ2tu0/Xc+4noaxyEffXNIs3cOULZ+GrE= -github.com/go-openapi/swag v0.23.0/go.mod h1:esZ8ITTYEsH1V2trKHjAN8Ai7xHb8RV+YSZ577vPjgQ= +github.com/go-openapi/swag v0.23.1 h1:lpsStH0n2ittzTnbaSloVZLuB5+fvSY/+hnagBjSNZU= +github.com/go-openapi/swag v0.23.1/go.mod h1:STZs8TbRvEQQKUA+JZNAm3EWlgaOBGpyFDqQnDHMef0= github.com/go-task/slim-sprig/v3 v3.0.0 h1:sUs3vkvUymDpBKi3qH1YSqBQk9+9D/8M2mN1vB6EwHI= github.com/go-task/slim-sprig/v3 v3.0.0/go.mod h1:W848ghGpv3Qj3dhTPRyJypKRiqCdHZiAzKg9hl15HA8= github.com/gogo/protobuf v1.3.2 h1:Ov1cvc58UF3b5XjBnZv7+opcTcQFZebYjWzi34vdm4Q= @@ -81,8 +81,8 @@ github.com/google/go-cmp v0.7.0/go.mod h1:pXiqmnSA92OHEEa9HXL2W4E7lf9JzCmGVUdgjX github.com/google/gofuzz v1.0.0/go.mod h1:dBl0BpW6vV/+mYPU4Po3pmUjxk6FQPldtuIdl/M65Eg= github.com/google/gofuzz v1.2.0 h1:xRy4A+RhZaiKjJ1bPfwQ8sedCA+YS2YcCHW6ec7JMi0= github.com/google/gofuzz v1.2.0/go.mod h1:dBl0BpW6vV/+mYPU4Po3pmUjxk6FQPldtuIdl/M65Eg= -github.com/google/pprof v0.0.0-20241210010833-40e02aabc2ad h1:a6HEuzUHeKH6hwfN/ZoQgRgVIWFJljSWa/zetS2WTvg= -github.com/google/pprof v0.0.0-20241210010833-40e02aabc2ad/go.mod h1:vavhavw2zAxS5dIdcRluK6cSGGPlZynqzFM8NdvU144= +github.com/google/pprof v0.0.0-20250403155104-27863c87afa6 h1:BHT72Gu3keYf3ZEu2J0b1vyeLSOYI8bm5wbJM/8yDe8= +github.com/google/pprof v0.0.0-20250403155104-27863c87afa6/go.mod h1:boTsfXsheKC2y+lKOCMpSfarhxDeIzfZG1jqGcPl3cA= github.com/google/shlex v0.0.0-20191202100458-e7afc7fbc510 h1:El6M4kTTCOh6aBiKaUGG7oYTSPP8MxqL4YI3kZKwcP4= github.com/google/shlex v0.0.0-20191202100458-e7afc7fbc510/go.mod h1:pupxD2MaaD3pAXIBCelhxNneeOaAeabZDe5s4K6zSpQ= github.com/google/uuid v1.6.0 h1:NIvaJDMOsjHA8n1jAhLSgzrAzy1Hgr+hNrb57e+94F0= @@ -140,10 +140,10 @@ github.com/munnerz/goautoneg v0.0.0-20191010083416-a7dc8b61c822 h1:C3w9PqII01/Oq github.com/munnerz/goautoneg v0.0.0-20191010083416-a7dc8b61c822/go.mod h1:+n7T8mK8HuQTcFwEeznm/DIxMOiR9yIdICNftLE1DvQ= github.com/mxk/go-flowrate v0.0.0-20140419014527-cca7078d478f h1:y5//uYreIhSUg3J1GEMiLbxo1LJaP8RfCpH6pymGZus= github.com/mxk/go-flowrate v0.0.0-20140419014527-cca7078d478f/go.mod h1:ZdcZmHo+o7JKHSa8/e818NopupXU1YMK5fe1lsApnBw= -github.com/onsi/ginkgo/v2 v2.23.3 h1:edHxnszytJ4lD9D5Jjc4tiDkPBZ3siDeJJkUZJJVkp0= -github.com/onsi/ginkgo/v2 v2.23.3/go.mod h1:zXTP6xIp3U8aVuXN8ENK9IXRaTjFnpVB9mGmaSRvxnM= -github.com/onsi/gomega v1.36.3 h1:hID7cr8t3Wp26+cYnfcjR6HpJ00fdogN6dqZ1t6IylU= -github.com/onsi/gomega v1.36.3/go.mod h1:8D9+Txp43QWKhM24yyOBEdpkzN8FvJyAwecBgsU4KU0= +github.com/onsi/ginkgo/v2 v2.23.4 h1:ktYTpKJAVZnDT4VjxSbiBenUjmlL/5QkBEocaWXiQus= +github.com/onsi/ginkgo/v2 v2.23.4/go.mod h1:Bt66ApGPBFzHyR+JO10Zbt0Gsp4uWxu5mIOTusL46e8= +github.com/onsi/gomega v1.37.0 h1:CdEG8g0S133B4OswTDC/5XPSzE1OeP29QOioj2PID2Y= +github.com/onsi/gomega v1.37.0/go.mod h1:8D9+Txp43QWKhM24yyOBEdpkzN8FvJyAwecBgsU4KU0= github.com/opencontainers/go-digest v1.0.0 h1:apOUWs51W5PlhuyGyz9FCeeBIOUDA/6nW8Oi/yOhh5U= github.com/opencontainers/go-digest v1.0.0/go.mod h1:0JzlMkj0TRzQZfJkVvzbP0HBR3IKzErnv2BNG4W4MAM= github.com/opencontainers/image-spec v1.1.1 h1:y0fUlFfIZhPF1W537XOLg0/fcx6zcHCJwooC2xJA040= @@ -157,8 +157,8 @@ github.com/planetscale/vtprotobuf v0.6.1-0.20240409071808-615f978279ca/go.mod h1 github.com/pmezard/go-difflib v1.0.0/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZNVY4sRDYZ/4= github.com/pmezard/go-difflib v1.0.1-0.20181226105442-5d4384ee4fb2 h1:Jamvg5psRIccs7FGNTlIRMkT8wgtp5eCXdBlqhYGL6U= github.com/pmezard/go-difflib v1.0.1-0.20181226105442-5d4384ee4fb2/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZNVY4sRDYZ/4= -github.com/prometheus/client_golang v1.21.1 h1:DOvXXTqVzvkIewV/CDPFdejpMCGeMcbGCQ8YOmu+Ibk= -github.com/prometheus/client_golang v1.21.1/go.mod h1:U9NM32ykUErtVBxdvD3zfi+EuFkkaBvMb09mIfe0Zgg= +github.com/prometheus/client_golang v1.22.0 h1:rb93p9lokFEsctTys46VnV1kLCDpVZ0a/Y92Vm0Zc6Q= +github.com/prometheus/client_golang v1.22.0/go.mod h1:R7ljNsLXhuQXYZYtw6GAE9AZg8Y7vEW5scdCXrWRXC0= github.com/prometheus/client_model v0.6.1 h1:ZKSh/rekM+n3CeS952MLRAdFwIKqeY8b62p8ais2e9E= github.com/prometheus/client_model v0.6.1/go.mod h1:OrxVMOVHjw3lKMa8+x6HeMGkHMQyHDk9E3jmP2AmGiY= github.com/prometheus/common v0.63.0 h1:YR/EIY1o3mEFP/kZCD7iDMnLPlGyuU2Gb3HIcXnA98k= @@ -176,8 +176,8 @@ github.com/spf13/pflag v1.0.6 h1:jFzHGLGAlb3ruxLB8MhbI6A8+AQX/2eW4qeyNZXNp2o= github.com/spf13/pflag v1.0.6/go.mod h1:McXfInJRrz4CZXVZOBLb0bTZqETkiAhM9Iw0y3An2Bg= github.com/stackrox/scanner v0.0.0-20240830165150-d133ba942d59 h1:XrOPpgBpAnwTXGbyAYSOongfFeVJJBWPTdWEgYw+Uck= github.com/stackrox/scanner v0.0.0-20240830165150-d133ba942d59/go.mod h1:xVs4A0Vur2djLSTZYtIj/5hgUORT1t405Fg0RX4/1kA= -github.com/stackrox/stackrox v0.0.0-20250325114232-8e68c6a26ed1 h1:jZAR27J5MMRkn3eEOVjtBdVSYKLmx0DP3QdtNUMDZFY= -github.com/stackrox/stackrox v0.0.0-20250325114232-8e68c6a26ed1/go.mod h1:AJRmMSul3qXVhjXf4FuRjw5OvzorgBRJ5/ght/sZq8w= +github.com/stackrox/stackrox v0.0.0-20250415091607-159cf2aea233 h1:4nPs380aJuWCdqZxSIxuXTFjKQF1fZ6UCv7RuwAksIw= +github.com/stackrox/stackrox v0.0.0-20250415091607-159cf2aea233/go.mod h1:OcfS0qFOxVTjbq25rXJlAst7CaKXLzpU/KIFpzaaq5I= github.com/stackrox/zap v1.18.2-0.20240314134248-5f932edd0404 h1:j2qhsZjUBpN4yaqEGkNrATdw3fE3vgMrVOhd44cUJDY= github.com/stackrox/zap v1.18.2-0.20240314134248-5f932edd0404/go.mod h1:xg/QME4nWcxGxrpdeYfq7UvYrLh66cuVKdrbD1XF/NI= github.com/stretchr/objx v0.1.0/go.mod h1:HFkY916IF+rwdDfMAkV7OtwuqBVzrE8GR6GFx+wExME= @@ -204,33 +204,35 @@ go.opentelemetry.io/contrib/instrumentation/google.golang.org/grpc/otelgrpc v0.5 go.opentelemetry.io/contrib/instrumentation/net/http/otelhttp v0.59.0 h1:CV7UdSGJt/Ao6Gp4CXckLxVRRsRgDHoI8XjbL3PDl8s= go.opentelemetry.io/contrib/instrumentation/net/http/otelhttp v0.59.0/go.mod h1:FRmFuRJfag1IZ2dPkHnEoSFVgTVPUd2qf5Vi69hLb8I= go.opentelemetry.io/otel v1.6.3/go.mod h1:7BgNga5fNlF/iZjG06hM3yofffp0ofKCDwSXx1GC4dI= -go.opentelemetry.io/otel v1.34.0 h1:zRLXxLCgL1WyKsPVrgbSdMN4c0FMkDAskSTQP+0hdUY= -go.opentelemetry.io/otel v1.34.0/go.mod h1:OWFPOQ+h4G8xpyjgqo4SxJYdDQ/qmRH+wivy7zzx9oI= +go.opentelemetry.io/otel v1.35.0 h1:xKWKPxrxB6OtMCbmMY021CqC45J+3Onta9MqjhnusiQ= +go.opentelemetry.io/otel v1.35.0/go.mod h1:UEqy8Zp11hpkUrL73gSlELM0DupHoiq72dR+Zqel/+Y= go.opentelemetry.io/otel/exporters/otlp/otlptrace v1.32.0 h1:IJFEoHiytixx8cMiVAO+GmHR6Frwu+u5Ur8njpFO6Ac= go.opentelemetry.io/otel/exporters/otlp/otlptrace v1.32.0/go.mod h1:3rHrKNtLIoS0oZwkY2vxi+oJcwFRWdtUyRII+so45p8= go.opentelemetry.io/otel/exporters/otlp/otlptrace/otlptracegrpc v1.32.0 h1:9kV11HXBHZAvuPUZxmMWrH8hZn/6UnHX4K0mu36vNsU= go.opentelemetry.io/otel/exporters/otlp/otlptrace/otlptracegrpc v1.32.0/go.mod h1:JyA0FHXe22E1NeNiHmVp7kFHglnexDQ7uRWDiiJ1hKQ= go.opentelemetry.io/otel/exporters/otlp/otlptrace/otlptracehttp v1.28.0 h1:j9+03ymgYhPKmeXGk5Zu+cIZOlVzd9Zv7QIiyItjFBU= go.opentelemetry.io/otel/exporters/otlp/otlptrace/otlptracehttp v1.28.0/go.mod h1:Y5+XiUG4Emn1hTfciPzGPJaSI+RpDts6BnCIir0SLqk= -go.opentelemetry.io/otel/metric v1.34.0 h1:+eTR3U0MyfWjRDhmFMxe2SsW64QrZ84AOhvqS7Y+PoQ= -go.opentelemetry.io/otel/metric v1.34.0/go.mod h1:CEDrp0fy2D0MvkXE+dPV7cMi8tWZwX3dmaIhwPOaqHE= -go.opentelemetry.io/otel/sdk v1.34.0 h1:95zS4k/2GOy069d321O8jWgYsW3MzVV+KuSPKp7Wr1A= -go.opentelemetry.io/otel/sdk v1.34.0/go.mod h1:0e/pNiaMAqaykJGKbi+tSjWfNNHMTxoC9qANsCzbyxU= +go.opentelemetry.io/otel/metric v1.35.0 h1:0znxYu2SNyuMSQT4Y9WDWej0VpcsxkuklLa4/siN90M= +go.opentelemetry.io/otel/metric v1.35.0/go.mod h1:nKVFgxBZ2fReX6IlyW28MgZojkoAkJGaE8CpgeAU3oE= +go.opentelemetry.io/otel/sdk v1.35.0 h1:iPctf8iprVySXSKJffSS79eOjl9pvxV9ZqOWT0QejKY= +go.opentelemetry.io/otel/sdk v1.35.0/go.mod h1:+ga1bZliga3DxJ3CQGg3updiaAJoNECOgJREo9KHGQg= go.opentelemetry.io/otel/sdk/metric v1.34.0 h1:5CeK9ujjbFVL5c1PhLuStg1wxA7vQv7ce1EK0Gyvahk= go.opentelemetry.io/otel/sdk/metric v1.34.0/go.mod h1:jQ/r8Ze28zRKoNRdkjCZxfs6YvBTG1+YIqyFVFYec5w= go.opentelemetry.io/otel/trace v1.6.3/go.mod h1:GNJQusJlUgZl9/TQBPKU/Y/ty+0iVB5fjhKeJGZPGFs= -go.opentelemetry.io/otel/trace v1.34.0 h1:+ouXS2V8Rd4hp4580a8q23bg0azF2nI8cqLYnC8mh/k= -go.opentelemetry.io/otel/trace v1.34.0/go.mod h1:Svm7lSjQD7kG7KJ/MUHPVXSDGz2OX4h0M2jHBhmSfRE= +go.opentelemetry.io/otel/trace v1.35.0 h1:dPpEfJu1sDIqruz7BHFG3c7528f6ddfSWfFDVt/xgMs= +go.opentelemetry.io/otel/trace v1.35.0/go.mod h1:WUk7DtFp1Aw2MkvqGdwiXYDZZNvA/1J8o6xRXLrIkyc= go.opentelemetry.io/proto/otlp v1.3.1 h1:TrMUixzpM0yuc/znrFTP9MMRh8trP93mkCiDVeXrui0= go.opentelemetry.io/proto/otlp v1.3.1/go.mod h1:0X1WI4de4ZsLrrJNLAQbFeLCm3T7yBkR0XqQ7niQU+8= go.uber.org/atomic v1.7.0/go.mod h1:fEN4uk6kAWBTFdckzkM89CLk9XfWZrxpCo0nPH17wJc= go.uber.org/atomic v1.11.0 h1:ZvwS0R+56ePWxUNi+Atn9dWONBPp/AUETXlHW0DxSjE= go.uber.org/atomic v1.11.0/go.mod h1:LUxbIzbOniOlMKjJjyPfpl4v+PKK2cNJn91OQbhoJI0= +go.uber.org/automaxprocs v1.6.0 h1:O3y2/QNTOdbF+e/dpXNNW7Rx2hZ4sTIPyybbxyNqTUs= +go.uber.org/automaxprocs v1.6.0/go.mod h1:ifeIMSnPZuznNm6jmdzmU3/bfk01Fe2fotchwEFJ8r8= go.uber.org/goleak v1.1.10/go.mod h1:8a7PlsEVH3e/a/GLqe5IIrQx6GzcnRmZEufDUTk4A7A= go.uber.org/goleak v1.3.0 h1:2K3zAYmnTNqV73imy9J1T3WC+gmCePx2hEGkimedGto= go.uber.org/goleak v1.3.0/go.mod h1:CoHD4mav9JJNrW/WLlf7HGZPjdw8EucARQHekz1X6bE= -go.uber.org/mock v0.5.0 h1:KAMbZvZPyBPWgD14IrIQ38QCyjwpvVVV6K/bHl1IwQU= -go.uber.org/mock v0.5.0/go.mod h1:ge71pBPLYDk7QIi1LupWxdAykm7KIEFchiOqd6z7qMM= +go.uber.org/mock v0.5.1 h1:ASgazW/qBmR+A32MYFDB6E2POoTgOwT509VP0CT/fjs= +go.uber.org/mock v0.5.1/go.mod h1:ge71pBPLYDk7QIi1LupWxdAykm7KIEFchiOqd6z7qMM= go.uber.org/multierr v1.6.0/go.mod h1:cdWPpRnG4AhwMwsgIHip0KRBQjJy5kYEpYjJxpXp9iU= go.uber.org/multierr v1.11.0 h1:blXXJkSxSSfBVBlC76pxqeO+LN3aDfLQo+309xJstO0= go.uber.org/multierr v1.11.0/go.mod h1:20+QtiLqy0Nd6FdQB9TLXag12DsQkrbs3htMFfDN80Y= @@ -247,10 +249,10 @@ golang.org/x/net v0.0.0-20190404232315-eb5bcb51f2a3/go.mod h1:t9HGtf8HONx5eT2rtn golang.org/x/net v0.0.0-20190620200207-3b0461eec859/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= golang.org/x/net v0.0.0-20200226121028-0de0cce0169b/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= golang.org/x/net v0.0.0-20201021035429-f5854403a974/go.mod h1:sp8m0HH+o8qH0wwXwYZr8TS3Oi6o0r6Gce1SSxlDquU= -golang.org/x/net v0.37.0 h1:1zLorHbz+LYj7MQlSf1+2tPIIgibq2eL5xkrGk6f+2c= -golang.org/x/net v0.37.0/go.mod h1:ivrbrMbzFq5J41QOQh0siUuly180yBYtLp+CKbEaFx8= -golang.org/x/oauth2 v0.28.0 h1:CrgCKl8PPAVtLnU3c+EDw6x11699EWlsDeWNWKdIOkc= -golang.org/x/oauth2 v0.28.0/go.mod h1:onh5ek6nERTohokkhCD/y2cV4Do3fxFHFuAejCkRWT8= +golang.org/x/net v0.39.0 h1:ZCu7HMWDxpXpaiKdhzIfaltL9Lp31x/3fCP11bc6/fY= +golang.org/x/net v0.39.0/go.mod h1:X7NRbYVEA+ewNkCNyJ513WmMdQ3BineSwVtN2zD/d+E= +golang.org/x/oauth2 v0.29.0 h1:WdYw2tdTK1S8olAzWHdgeqfy+Mtm9XNhv/xJsY65d98= +golang.org/x/oauth2 v0.29.0/go.mod h1:onh5ek6nERTohokkhCD/y2cV4Do3fxFHFuAejCkRWT8= golang.org/x/sync v0.0.0-20190423024810-112230192c58/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= golang.org/x/sync v0.0.0-20190911185100-cd5d95a43a6e/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= golang.org/x/sync v0.0.0-20201020160332-67f06af15bc9/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= @@ -258,14 +260,14 @@ golang.org/x/sys v0.0.0-20190215142949-d0b11bdaac8a/go.mod h1:STP8DvDyc/dI5b8T5h golang.org/x/sys v0.0.0-20190412213103-97732733099d/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20200930185726-fdedc70b468f/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20220715151400-c0bba94af5f8/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= -golang.org/x/sys v0.31.0 h1:ioabZlmFYtWhL+TRYpcnNlLwhyxaM9kWTDEmfnprqik= -golang.org/x/sys v0.31.0/go.mod h1:BJP2sWEmIv4KK5OTEluFJCKSidICx8ciO85XgH3Ak8k= -golang.org/x/term v0.30.0 h1:PQ39fJZ+mfadBm0y5WlL4vlM7Sx1Hgf13sMIY2+QS9Y= -golang.org/x/term v0.30.0/go.mod h1:NYYFdzHoI5wRh/h5tDMdMqCqPJZEuNqVR5xJLd/n67g= +golang.org/x/sys v0.32.0 h1:s77OFDvIQeibCmezSnk/q6iAfkdiQaJi4VzroCFrN20= +golang.org/x/sys v0.32.0/go.mod h1:BJP2sWEmIv4KK5OTEluFJCKSidICx8ciO85XgH3Ak8k= +golang.org/x/term v0.31.0 h1:erwDkOK1Msy6offm1mOgvspSkslFnIGsFnxOKoufg3o= +golang.org/x/term v0.31.0/go.mod h1:R4BeIy7D95HzImkxGkTW1UQTtP54tio2RyHz7PwK0aw= golang.org/x/text v0.3.0/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ= golang.org/x/text v0.3.3/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ= -golang.org/x/text v0.23.0 h1:D71I7dUrlY+VX0gQShAThNGHFxZ13dGLBHQLVl1mJlY= -golang.org/x/text v0.23.0/go.mod h1:/BLNzu4aZCJ1+kcD0DNRotWKage4q2rGVAg4o22unh4= +golang.org/x/text v0.24.0 h1:dd5Bzh4yt5KYA8f9CJHCP4FB4D51c2c6JvN37xJJkJ0= +golang.org/x/text v0.24.0/go.mod h1:L8rBsPeo2pSS+xqN0d5u2ikmjtmoJbDBT1b7nHvFCdU= golang.org/x/time v0.11.0 h1:/bpjEDfN9tkoN/ryeYHnv5hcMlc8ncjMcM4XBk5NWV0= golang.org/x/time v0.11.0/go.mod h1:CDIdPxbZBQxdj6cxyCIdrNogrJKMJ7pr37NYpMcMDSg= golang.org/x/tools v0.0.0-20180917221912-90fa682c2a6e/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= @@ -274,8 +276,8 @@ golang.org/x/tools v0.0.0-20191108193012-7d206e10da11/go.mod h1:b+2E5dAYhXwXZwtn golang.org/x/tools v0.0.0-20191119224855-298f0cb1881e/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= golang.org/x/tools v0.0.0-20200619180055-7c47624df98f/go.mod h1:EkVYQZoAsY45+roYkvgYkIh4xh/qjgUK9TdY2XT94GE= golang.org/x/tools v0.0.0-20210106214847-113979e3529a/go.mod h1:emZCQorbCU4vsT4fOWvOPXz4eW1wZW4PmDk9uLelYpA= -golang.org/x/tools v0.31.0 h1:0EedkvKDbh+qistFTd0Bcwe/YLh4vHwWEkiI0toFIBU= -golang.org/x/tools v0.31.0/go.mod h1:naFTU+Cev749tSJRXJlna0T3WxKvb1kWEx15xA4SdmQ= +golang.org/x/tools v0.32.0 h1:Q7N1vhpkQv7ybVzLFtTjvQya2ewbwNDZzUgfXGqtMWU= +golang.org/x/tools v0.32.0/go.mod h1:ZxrU41P/wAbZD8EDa6dDCa6XfpkhJ7HFMjHJXfBDu8s= golang.org/x/xerrors v0.0.0-20190717185122-a985d3407aa7/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= golang.org/x/xerrors v0.0.0-20191011141410-1b5146add898/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= golang.org/x/xerrors v0.0.0-20191204190536-9bdfabe68543/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= @@ -284,10 +286,10 @@ google.golang.org/genproto/googleapis/api v0.0.0-20250303144028-a0af3efb3deb h1: google.golang.org/genproto/googleapis/api v0.0.0-20250303144028-a0af3efb3deb/go.mod h1:jbe3Bkdp+Dh2IrslsFCklNhweNTBgSYanP1UXhJDhKg= google.golang.org/genproto/googleapis/rpc v0.0.0-20250313205543-e70fdf4c4cb4 h1:iK2jbkWL86DXjEx0qiHcRE9dE4/Ahua5k6V8OWFb//c= google.golang.org/genproto/googleapis/rpc v0.0.0-20250313205543-e70fdf4c4cb4/go.mod h1:LuRYeWDFV6WOn90g357N17oMCaxpgCnbi/44qJvDn2I= -google.golang.org/grpc v1.71.0 h1:kF77BGdPTQ4/JZWMlb9VpJ5pa25aqvVqogsxNHHdeBg= -google.golang.org/grpc v1.71.0/go.mod h1:H0GRtasmQOh9LkFoCPDu3ZrwUtD1YGE+b2vYBYd/8Ec= -google.golang.org/protobuf v1.36.5 h1:tPhr+woSbjfYvY6/GPufUoYizxw1cF/yFoxJ2fmpwlM= -google.golang.org/protobuf v1.36.5/go.mod h1:9fA7Ob0pmnwhb644+1+CVWFRbNajQ6iRojtC/QF5bRE= +google.golang.org/grpc v1.71.1 h1:ffsFWr7ygTUscGPI0KKK6TLrGz0476KUvvsbqWK0rPI= +google.golang.org/grpc v1.71.1/go.mod h1:H0GRtasmQOh9LkFoCPDu3ZrwUtD1YGE+b2vYBYd/8Ec= +google.golang.org/protobuf v1.36.6 h1:z1NpPI8ku2WgiWnf+t9wTPsn6eP1L7ksHUlkfLvd9xY= +google.golang.org/protobuf v1.36.6/go.mod h1:jduwjTPXsFjZGTmRluh+L6NjiWu7pchiJ2/5YcXBHnY= gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= gopkg.in/check.v1 v1.0.0-20180628173108-788fd7840127/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= gopkg.in/check.v1 v1.0.0-20201130134442-10cb98267c6c h1:Hei/4ADfdWqJk1ZMxUNpqntNwaWcugrBjAiHlqqRiVk= diff --git a/integration-tests/pkg/mock_sensor/legacy.go b/integration-tests/pkg/mock_sensor/legacy.go new file mode 100644 index 0000000000..d5fca3a42b --- /dev/null +++ b/integration-tests/pkg/mock_sensor/legacy.go @@ -0,0 +1,31 @@ +package mock_sensor + +import ( + sensorAPI "github.com/stackrox/rox/generated/internalapi/sensor" +) + +// This type is only used as a means to implement the legacy network service. +// Once the new network RPC is implemented, we can fully get rid of this. +type legacyNetworkServer struct { + *MockSensor +} + +func newLegacyServer(m *MockSensor) *legacyNetworkServer { + return &legacyNetworkServer{ + MockSensor: m, + } +} + +// PushNetworkConnectionInfo conforms to the Sensor API. It is here that networking +// events (connections and endpoints) are handled and stored/sent to the relevant channel +func (l *legacyNetworkServer) PushNetworkConnectionInfo(stream sensorAPI.NetworkConnectionInfoService_PushNetworkConnectionInfoServer) error { + for { + signal, err := stream.Recv() + if err != nil { + return err + } + + networkConnInfo := signal.GetInfo() + l.pushNetworkConnectionInfo(networkConnInfo) + } +} diff --git a/integration-tests/pkg/mock_sensor/server.go b/integration-tests/pkg/mock_sensor/server.go index 363753e035..867938ec5b 100644 --- a/integration-tests/pkg/mock_sensor/server.go +++ b/integration-tests/pkg/mock_sensor/server.go @@ -10,7 +10,9 @@ import ( "sync" "time" + "github.com/stackrox/rox/generated/internalapi/sensor" sensorAPI "github.com/stackrox/rox/generated/internalapi/sensor" + utils "github.com/stackrox/rox/pkg/net" "google.golang.org/grpc" "google.golang.org/grpc/keepalive" @@ -56,16 +58,22 @@ type MockSensor struct { lineageChannel RingChan[*sensorAPI.ProcessSignal_LineageInfo] connectionChannel RingChan[*sensorAPI.NetworkConnection] endpointChannel RingChan[*sensorAPI.NetworkEndpoint] + + legacyServer *legacyNetworkServer } func NewMockSensor(test string) *MockSensor { - return &MockSensor{ + mockSensor := &MockSensor{ testName: test, processes: make(map[string]ProcessMap), processLineages: make(map[string]LineageMap), connections: make(map[string][]types.NetworkInfoBatch), endpoints: make(map[string]EndpointMap), } + + mockSensor.legacyServer = newLegacyServer(mockSensor) + + return mockSensor } // LiveProcesses returns a channel that can be used to read live @@ -267,7 +275,7 @@ func (m *MockSensor) Start() { ) sensorAPI.RegisterCollectorServiceServer(m.grpcServer, m) - sensorAPI.RegisterNetworkConnectionInfoServiceServer(m.grpcServer, m) + sensorAPI.RegisterNetworkConnectionInfoServiceServer(m.grpcServer, m.legacyServer) m.processChannel = NewRingChan[*sensorAPI.ProcessSignal](gDefaultRingSize) m.lineageChannel = NewRingChan[*sensorAPI.ProcessSignal_LineageInfo](gDefaultRingSize) @@ -330,23 +338,15 @@ func (m *MockSensor) convertToContainerConnsMap(connections []*sensorAPI.Network return containerConnsMap } -// Communicate conforms to the Sensor API. It is here that process signals and +// PushProcesses conforms to the Sensor API. It is here that process signals and // process lineage information is handled and stored/sent to the relevant channel -func (m *MockSensor) Communicate(stream sensorAPI.CollectorService_CommunicateServer) error { +func (m *MockSensor) PushProcesses(stream sensorAPI.CollectorService_PushProcessesServer) error { for { signal, err := stream.Recv() if err != nil { return err } - - switch signal.GetMsg().(type) { - case *sensorAPI.MsgFromCollector_ProcessSignal: - m.pushSignal(signal.GetProcessSignal()) - case *sensorAPI.MsgFromCollector_Register: - // Ignored event - case *sensorAPI.MsgFromCollector_Info: - // Unimplemented event - } + m.pushSignal(signal) } } @@ -391,27 +391,30 @@ func (m *MockSensor) pushSignal(signal *sensorAPI.ProcessSignal) error { // PushNetworkConnectionInfo conforms to the Sensor API. It is here that networking // events (connections and endpoints) are handled and stored/sent to the relevant channel -func (m *MockSensor) PushNetworkConnectionInfo(stream sensorAPI.NetworkConnectionInfoService_PushNetworkConnectionInfoServer) error { +func (m *MockSensor) PushNetworkConnectionInfo(stream sensorAPI.CollectorService_PushNetworkConnectionInfoServer) error { for { - signal, err := stream.Recv() + networkConnInfo, err := stream.Recv() if err != nil { return err } - networkConnInfo := signal.GetInfo() - connections := networkConnInfo.GetUpdatedConnections() - endpoints := networkConnInfo.GetUpdatedEndpoints() + m.pushNetworkConnectionInfo(networkConnInfo) + } +} - for _, endpoint := range endpoints { - m.pushEndpoint(endpoint.GetContainerId(), endpoint) - m.endpointChannel.Write(endpoint) - } +func (m *MockSensor) pushNetworkConnectionInfo(msg *sensor.NetworkConnectionInfo) { + connections := msg.GetUpdatedConnections() + endpoints := msg.GetUpdatedEndpoints() - containerConnsMap := m.convertToContainerConnsMap(connections) - m.pushConnections(containerConnsMap) - for _, connection := range connections { - m.connectionChannel.Write(connection) - } + for _, endpoint := range endpoints { + m.pushEndpoint(endpoint.GetContainerId(), endpoint) + m.endpointChannel.Write(endpoint) + } + + containerConnsMap := m.convertToContainerConnsMap(connections) + m.pushConnections(containerConnsMap) + for _, connection := range connections { + m.connectionChannel.Write(connection) } } @@ -532,6 +535,36 @@ func (m *MockSensor) pushEndpoint(containerID string, endpoint *sensorAPI.Networ } } +// translateAddress is a helper function for converting binary representations +// of network addresses (in the signals) to usable forms for testing +func translateAddress(addr *sensorAPI.NetworkAddress) string { + peerId := utils.NetworkPeerID{Port: uint16(addr.GetPort())} + addressData := addr.GetAddressData() + if len(addressData) > 0 { + peerId.Address = utils.IPFromBytes(addressData) + return peerId.String() + } + + // If there is no address data, this is either the source address or + // IpNetwork should be set and represent a CIDR block or external IP address. + ipNetworkData := addr.GetIpNetwork() + if len(ipNetworkData) == 0 { + return peerId.String() + } + + ipNetwork := utils.IPNetworkFromCIDRBytes(ipNetworkData) + prefixLen := ipNetwork.PrefixLen() + // If this is IPv4 and the prefix length is 32 or this is IPv6 and the prefix length + // is 128 this is a regular IP address and not a CIDR block + if (ipNetwork.Family() == utils.IPv4 && prefixLen == byte(32)) || + (ipNetwork.Family() == utils.IPv6 && prefixLen == byte(128)) { + peerId.Address = ipNetwork.IP() + } else { + peerId.IPNetwork = ipNetwork + } + return peerId.String() +} + func (m *MockSensor) SetTestName(testName string) { m.testName = testName }