This repository has been archived by the owner on Jan 19, 2024. It is now read-only.
-
Notifications
You must be signed in to change notification settings - Fork 1
/
Copy patheventhandler.go
90 lines (80 loc) · 2.79 KB
/
eventhandler.go
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
package main
import (
"context"
"errors"
cloudevents "github.com/cloudevents/sdk-go/v2"
"github.com/cloudevents/sdk-go/v2/types"
keptnv2 "github.com/keptn/go-utils/pkg/lib/v0_2_0"
logger "github.com/sirupsen/logrus"
"net/url"
)
// EventHandler handles events of type 'test.triggered' and kicks off
// the TestRunner to execute the JMeter tests
type EventHandler struct {
testRunner *TestRunner
}
func (e *EventHandler) handleEvent(ctx context.Context, event cloudevents.Event) error {
extensions := event.Context.GetExtensions()
shkeptncontext, err := types.ToString(extensions["shkeptncontext"])
if err != nil {
return err
}
var commitID string
event.ExtensionAs("gitcommitid", &commitID)
if event.Type() != keptnv2.GetTriggeredEventType(keptnv2.TestTaskName) {
logger.Warnf("Received unexpected keptn event: %s", event.Type())
return nil
}
data := &keptnv2.TestTriggeredEventData{}
if err := event.DataAs(data); err != nil {
logger.Errorf("Unable to decode 'test.triggered' event data: %v", err)
return nil
}
if data.Test.TestStrategy == TestStrategy_RealUser {
logger.Infof("Received '%s' test strategy, hence no tests are triggered", TestStrategy_RealUser)
return nil
}
testInfo, err := createTestInfo(*data, shkeptncontext, event.ID(), commitID)
if err != nil {
logger.Errorf("Unable to create test info: %v", err)
return nil
}
if err := e.testRunner.RunTests(ctx, *testInfo); err != nil {
logger.Errorf("Unable to run JMeter tests: %v", err)
}
return nil
}
func createTestInfo(data keptnv2.TestTriggeredEventData, shkeptncontext string, triggeredID string, commitID string) (*TestInfo, error) {
serviceURL, err := getServiceURL(data)
if err != nil {
return nil, err
}
return &TestInfo{
Project: data.Project,
Service: data.Service,
Stage: data.Stage,
TestStrategy: data.Test.TestStrategy,
Context: shkeptncontext,
TriggeredID: triggeredID,
CommitID: commitID,
TestTriggeredData: data,
ServiceURL: serviceURL,
}, nil
}
// getServiceURL returns the service URL that is either passed via the DeploymentURI* parameters or constructs one based on keptn naming structure
func getServiceURL(data keptnv2.TestTriggeredEventData) (*url.URL, error) {
if len(data.Deployment.DeploymentURIsLocal) > 0 && data.Deployment.DeploymentURIsLocal[0] != "" {
newurl, err := url.Parse(data.Deployment.DeploymentURIsLocal[0])
if newurl.Path == "" {
newurl.Path += "/"
}
return newurl, err
} else if len(data.Deployment.DeploymentURIsPublic) > 0 && data.Deployment.DeploymentURIsPublic[0] != "" {
newurl, err := url.Parse(data.Deployment.DeploymentURIsPublic[0])
if newurl.Path == "" {
newurl.Path += "/"
}
return newurl, err
}
return nil, errors.New("no deployment URI included in event")
}