mirror of
https://github.com/SAP/jenkins-library.git
synced 2024-12-14 11:03:09 +02:00
42b92d1bfe
* Adds GetLog() function to orchestrator * Fixes BUILD_NUMBER env variable * Fixes correct env var for JENKINS_HOME * Adds getEnv to read env variables with default value, adds test for jenkins GetLog() implementation * Adds possibility to read errorJsons; updates splunk package for log files (WIP) * Uncommenting dev code * Adds GetLog() function to orchestrator * Fixes BUILD_NUMBER env variable * Fixes correct env var for JENKINS_HOME * Adds getEnv to read env variables with default value, adds test for jenkins GetLog() implementation * Adds possibility to read errorJsons; updates splunk package for log files (WIP) * Uncommenting dev code * Adds GetRequest function which holds the response in memory (not saved to disk) * Implements GetLog() function for ADO, adds function to read PipelineRuntime * PAT has been revoked * Changes http package, s.t. if password only is required basic auth works too * Adds env variable for azure token, error handling in case of unauthenticated/nil response * Adds logging output in case env variable can not be read and fallback variable needs to be used * Adds usage of environment variables for auth, uses jenkins api * Adds init functionality for orchestrators, updates GetLog() and GetPipelineStartTime() function * Adds initaliziation function for orchestrator authetnication * Adds settings struct for orchestrator authentication * Adds function to whole logfile to Splunk * Struct for pipeline related telemetry information * Increase messagebatch size to 10k * Changes splunk package to a pointer based implementation, updates generated files and corresponding template and tests for splunk * Changes telemetry package to pointer based implementation to have multiple telemetry objects, adjusted tests and splunk implementation * Changes content type to txt * Send telemetry independent of logfiles, increases amount of messages per file * Adds JobURL for orchestrators and UnknownOrchestrator as fallback * telemetry makes use of orchestrator specific information * Adds orchestrator independent correlationID * Adds custom fields for pipeline status * go fmt * Removes env var test - no env variables are read anymore * Use UnknownOrchestratorConfigProvider in case the orchestrator can not be initalized * Removes Custom fields from telemetry as these can not be reflected in SWA * Adds custom telemetry information (piperHash,..) to each step telemetry information * Removes falltrough in case no orchestrator has been found * Updates tests for orchestrator package * Adds orchestrator import in generated files * Updates generator files for internal library * Adds orchestrator telemetry information to steps * Updates generated files, fatalHook writes to cpe * Go generate from master, go fmt * Adds Custom Data field LastErrorCode * Removes GetLog() test * Update init_unix.go * Update docker_integration_test_executor.go * Update integration_api_cli_test.go * Reverts go1.17 fmt formatting * Reverts go1.17 fmt formatting * Reverts go1.17 fmt formatting * Renames customTelemetryData to stepTelemetryData * Adjustments to orchestrator-package, cleanup, adds JobName * Adjusts commonPipelineEnvironment path * Adds pipelineTelemetry struct to telemetry package, removes pipeline telemetry structs from splunk package * Go fmt * Changes path for errorDetails, adds debug information * Removes custom fields from step, adds orchestrator, commithash to baseMetadata * Adjusts tests for telemetry package * Adds tests for orchestrator * Updates generated files, initalization of splunk client only if its available in the config * Fixes typo in helper go * Update pkg/http/downloader.go * Update pkg/http/downloader.go * Update pkg/log/fatalHook.go * Update fatalHook.go * Update pkg/splunk/splunk.go * Update pkg/telemetry/data.go * Adds GetBuildStatus() and GetAPIInformation() to orchestrators * error formatting * Bugfix: dont send telemetry data if disabled, adjusts test * go fmt * Use correct error handling * Update pkg/telemetry/telemetry.go * Fixes telemetry disabled in the tests * Fixes http tests * Log fatal errors to logFile * Adds CustomReportingConfig to hooks * Cleanup comments in splunk package * Adds possibility to send telemetry to custom endpoint * Adds debug output for the payload * Debug output for the payload as a string * Adds test cases for changes in telemetry package * go fmt * Adds generated files for new step * Reverts changes for http tests, causing problems with go1.15, changes need to be applied for newer go version >=1.17 * Adjusts test for sonarExecuteScan * Adjusts test for sonarExecuteScan * Adds explanation for customreportingConfig * Makes disableing of customSend more obvious * Adds custom step reporting to each step, updates generated files, adjusts helper testdata * fixes unit test wrong usage of logging * Send pipeline data altough there has been no error, adjust test cases * Reverts changes for customReporting * Updates generated files, removes customReporting * Removes writing errorDetails to CPE * Reverts usage of customreporting * go fmt * reverts changes in http_test * reverts changes in http_test * Skips integration cnb test Co-authored-by: Oliver Nocon <33484802+OliverNocon@users.noreply.github.com>
177 lines
5.5 KiB
Go
177 lines
5.5 KiB
Go
// +build !release
|
|
|
|
package whitesource
|
|
|
|
import (
|
|
"fmt"
|
|
"strconv"
|
|
"time"
|
|
)
|
|
|
|
// SystemMock stores a number of WhiteSource objects and, based on that, mocks the behavior of System.
|
|
type SystemMock struct {
|
|
ProductName string
|
|
Products []Product
|
|
Projects []Project
|
|
Alerts []Alert
|
|
AlertType string
|
|
AlertError error
|
|
Libraries []Library
|
|
RiskReport []byte
|
|
VulnerabilityReport []byte
|
|
}
|
|
|
|
// GetProductByName mimics retrieving a Product by name. It returns an error of no Product is stored in the mock.
|
|
func (m *SystemMock) GetProductByName(productName string) (Product, error) {
|
|
for _, product := range m.Products {
|
|
if product.Name == productName {
|
|
return product, nil
|
|
}
|
|
}
|
|
return Product{}, fmt.Errorf("no product with name '%s' found in Whitesource", productName)
|
|
}
|
|
|
|
// CreateProduct appends a new Product to the system mock and returns its token ("mock-product-token-<index>").
|
|
func (m *SystemMock) CreateProduct(productName string) (string, error) {
|
|
now := time.Now().Format(DateTimeLayout)
|
|
productIndex := len(m.Products)
|
|
product := Product{
|
|
Name: productName,
|
|
Token: "mock-product-token-" + strconv.Itoa(productIndex),
|
|
CreationDate: now,
|
|
LastUpdateDate: now,
|
|
}
|
|
m.Products = append(m.Products, product)
|
|
return product.Token, nil
|
|
}
|
|
|
|
// SetProductAssignments checks if the system mock contains a product with the given token and returns
|
|
// an error depending on that, but otherwise does nothing with the provided arguments.
|
|
func (m *SystemMock) SetProductAssignments(productToken string, _, _, _ *Assignment) error {
|
|
for _, product := range m.Products {
|
|
if product.Token == productToken {
|
|
return nil
|
|
}
|
|
}
|
|
return fmt.Errorf("no product with that token")
|
|
}
|
|
|
|
// GetProjectsMetaInfo returns the list of Projects stored in the mock or an error if token is unknown.
|
|
func (m *SystemMock) GetProjectsMetaInfo(productToken string) ([]Project, error) {
|
|
for _, product := range m.Products {
|
|
if product.Token == productToken {
|
|
return m.Projects, nil
|
|
}
|
|
}
|
|
return nil, fmt.Errorf("no product with that token")
|
|
}
|
|
|
|
// GetProjectToken checks the Projects stored in the mock and returns a valid token, or an empty token and no error.
|
|
func (m *SystemMock) GetProjectToken(productToken, projectName string) (string, error) {
|
|
for _, project := range m.Projects {
|
|
if project.Name == projectName {
|
|
return project.Token, nil
|
|
}
|
|
}
|
|
return "", nil
|
|
}
|
|
|
|
// GetProjectByToken checks the Projects stored in the mock and returns the one with the given token or an error.
|
|
func (m *SystemMock) GetProjectByToken(projectToken string) (Project, error) {
|
|
for _, project := range m.Projects {
|
|
if project.Token == projectToken {
|
|
return project, nil
|
|
}
|
|
}
|
|
return Project{}, fmt.Errorf("no project with token '%s' found in Whitesource", projectToken)
|
|
}
|
|
|
|
// GetProjectRiskReport mocks retrieving a risc report.
|
|
func (m *SystemMock) GetProjectRiskReport(projectToken string) ([]byte, error) {
|
|
return m.RiskReport, nil
|
|
}
|
|
|
|
// GetProjectVulnerabilityReport mocks retrieving a vulnerability report.
|
|
// Behavior depends on what is stored in the mock.
|
|
func (m *SystemMock) GetProjectVulnerabilityReport(projectToken string, format string) ([]byte, error) {
|
|
_, err := m.GetProjectByToken(projectToken)
|
|
if err != nil {
|
|
return nil, err
|
|
}
|
|
if m.VulnerabilityReport == nil {
|
|
return nil, fmt.Errorf("no report available")
|
|
}
|
|
return m.VulnerabilityReport, nil
|
|
}
|
|
|
|
// GetProjectAlerts returns the alerts stored in the SystemMock.
|
|
func (m *SystemMock) GetProjectAlerts(projectToken string) ([]Alert, error) {
|
|
return m.Alerts, nil
|
|
}
|
|
|
|
// GetProjectAlertsByType returns the alerts stored in the SystemMock and records the type.
|
|
func (m *SystemMock) GetProjectAlertsByType(projectToken, alertType string) ([]Alert, error) {
|
|
if m.AlertError != nil {
|
|
return m.Alerts, m.AlertError
|
|
}
|
|
m.AlertType = alertType
|
|
return m.Alerts, nil
|
|
}
|
|
|
|
// GetProjectLibraryLocations returns the libraries stored in the SystemMock.
|
|
func (m *SystemMock) GetProjectLibraryLocations(projectToken string) ([]Library, error) {
|
|
return m.Libraries, nil
|
|
}
|
|
|
|
// NewSystemMockWithProjectName returns a pointer to a new instance of SystemMock using a project with a defined name.
|
|
func NewSystemMockWithProjectName(lastUpdateDate, projectName string) *SystemMock {
|
|
mockLibrary := Library{
|
|
Name: "mock-library",
|
|
Filename: "mock-library-file",
|
|
Version: "mock-library-version",
|
|
Project: projectName,
|
|
}
|
|
return &SystemMock{
|
|
ProductName: "mock-product",
|
|
Products: []Product{
|
|
{
|
|
Name: "mock-product",
|
|
Token: "mock-product-token",
|
|
CreationDate: "last-thursday",
|
|
LastUpdateDate: lastUpdateDate,
|
|
},
|
|
},
|
|
Projects: []Project{
|
|
{
|
|
ID: 42,
|
|
Name: projectName,
|
|
PluginName: "mock-plugin-name",
|
|
Token: "mock-project-token",
|
|
UploadedBy: "MrBean",
|
|
CreationDate: "last-thursday",
|
|
LastUpdateDate: lastUpdateDate,
|
|
},
|
|
},
|
|
Alerts: []Alert{
|
|
{
|
|
Vulnerability: Vulnerability{
|
|
Name: "something severe",
|
|
Score: 5,
|
|
},
|
|
Library: mockLibrary,
|
|
Project: projectName,
|
|
CreationDate: "last-thursday",
|
|
},
|
|
},
|
|
Libraries: []Library{mockLibrary},
|
|
RiskReport: []byte("mock-risk-report"),
|
|
VulnerabilityReport: []byte("mock-vulnerability-report"),
|
|
}
|
|
}
|
|
|
|
// NewSystemMock returns a pointer to a new instance of SystemMock.
|
|
func NewSystemMock(lastUpdateDate string) *SystemMock {
|
|
const projectName = "mock-project - 1"
|
|
return NewSystemMockWithProjectName(lastUpdateDate, projectName)
|
|
}
|