Add support of EventDomainFronting event

This commit is contained in:
9seconds
2021-03-29 11:56:05 +03:00
parent 36d695118e
commit bef14bd009
17 changed files with 317 additions and 53 deletions
+7 -5
View File
@@ -60,7 +60,7 @@ func NewEventStream(observerFactories []ObserverFactory) mtglib.EventStream {
return rv
}
func eventStreamProcessor(ctx context.Context, eventChan <-chan mtglib.Event, observer Observer) {
func eventStreamProcessor(ctx context.Context, eventChan <-chan mtglib.Event, observer Observer) { // nolint: cyclop
defer observer.Shutdown()
for {
@@ -69,14 +69,16 @@ func eventStreamProcessor(ctx context.Context, eventChan <-chan mtglib.Event, ob
return
case evt := <-eventChan:
switch typedEvt := evt.(type) {
case mtglib.EventStart:
observer.EventStart(typedEvt)
case mtglib.EventConnectedToDC:
observer.EventConnectedToDC(typedEvt)
case mtglib.EventTraffic:
observer.EventTraffic(typedEvt)
case mtglib.EventStart:
observer.EventStart(typedEvt)
case mtglib.EventFinish:
observer.EventFinish(typedEvt)
case mtglib.EventConnectedToDC:
observer.EventConnectedToDC(typedEvt)
case mtglib.EventDomainFronting:
observer.EventDomainFronting(typedEvt)
case mtglib.EventIPBlocklisted:
observer.EventIPBlocklisted(typedEvt)
case mtglib.EventConcurrencyLimited:
+23
View File
@@ -90,6 +90,29 @@ func (suite *EventStreamTestSuite) TestEventConnectedToDC() {
time.Sleep(100 * time.Millisecond)
}
func (suite *EventStreamTestSuite) TestEventDomainFronting() {
evt := mtglib.EventDomainFronting{
CreatedAt: time.Now(),
ConnID: "connID",
}
for _, v := range []*ObserverMock{suite.observerMock1, suite.observerMock2} {
v.
On("EventDomainFronting", mock.Anything).
Once().
Run(func(args mock.Arguments) {
caught := args.Get(0).(mtglib.EventDomainFronting)
suite.Equal(evt.CreatedAt, caught.CreatedAt)
suite.Equal(evt.ConnID, caught.ConnID)
suite.Equal(evt.StreamID(), caught.StreamID())
})
}
suite.stream.Send(suite.ctx, evt)
time.Sleep(100 * time.Millisecond)
}
func (suite *EventStreamTestSuite) TestEventTraffic() {
evt := mtglib.EventTraffic{
CreatedAt: time.Now(),
+1
View File
@@ -6,6 +6,7 @@ type Observer interface {
EventStart(mtglib.EventStart)
EventFinish(mtglib.EventFinish)
EventConnectedToDC(mtglib.EventConnectedToDC)
EventDomainFronting(mtglib.EventDomainFronting)
EventTraffic(mtglib.EventTraffic)
EventConcurrencyLimited(mtglib.EventConcurrencyLimited)
EventIPBlocklisted(mtglib.EventIPBlocklisted)
+4
View File
@@ -17,6 +17,10 @@ func (o *ObserverMock) EventConnectedToDC(evt mtglib.EventConnectedToDC) {
o.Called(evt)
}
func (o *ObserverMock) EventDomainFronting(evt mtglib.EventDomainFronting) {
o.Called(evt)
}
func (o *ObserverMock) EventTraffic(evt mtglib.EventTraffic) {
o.Called(evt)
}
+15
View File
@@ -40,6 +40,21 @@ func (m multiObserver) EventConnectedToDC(evt mtglib.EventConnectedToDC) {
wg.Wait()
}
func (m multiObserver) EventDomainFronting(evt mtglib.EventDomainFronting) {
wg := &sync.WaitGroup{}
wg.Add(len(m.observers))
for _, v := range m.observers {
go func(obs Observer) {
defer wg.Done()
obs.EventDomainFronting(evt)
}(v)
}
wg.Wait()
}
func (m multiObserver) EventTraffic(evt mtglib.EventTraffic) {
wg := &sync.WaitGroup{}
wg.Add(len(m.observers))
+1
View File
@@ -19,6 +19,7 @@ type noopObserver struct{}
func (n noopObserver) EventStart(_ mtglib.EventStart) {}
func (n noopObserver) EventConnectedToDC(_ mtglib.EventConnectedToDC) {}
func (n noopObserver) EventDomainFronting(_ mtglib.EventDomainFronting) {}
func (n noopObserver) EventTraffic(_ mtglib.EventTraffic) {}
func (n noopObserver) EventFinish(_ mtglib.EventFinish) {}
func (n noopObserver) EventConcurrencyLimited(_ mtglib.EventConcurrencyLimited) {}
+6
View File
@@ -31,6 +31,10 @@ func (suite *NoopTestSuite) SetupSuite() {
RemoteIP: net.ParseIP("127.1.0.1"),
DC: 2,
},
"domain-fronting": mtglib.EventDomainFronting{
CreatedAt: time.Now(),
ConnID: "connID",
},
"traffic": mtglib.EventTraffic{
CreatedAt: time.Now(),
ConnID: "connID",
@@ -76,6 +80,8 @@ func (suite *NoopTestSuite) TestObserver() {
observer.EventStart(typedEvt)
case mtglib.EventConnectedToDC:
observer.EventConnectedToDC(typedEvt)
case mtglib.EventDomainFronting:
observer.EventDomainFronting(typedEvt)
case mtglib.EventFinish:
observer.EventFinish(typedEvt)
case mtglib.EventConcurrencyLimited: