Skip to content

Commit 3ae3878

Browse files
authored
Merge pull request #6 from copyleftdev/feature/golden-test-data-generator
Feature/golden test data generator
2 parents 905fa8b + 1f2c128 commit 3ae3878

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

44 files changed

+48252
-101
lines changed

.gitattributes

Lines changed: 40 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,40 @@
1+
# Images
2+
*.jpg filter=lfs diff=lfs merge=lfs -text
3+
*.jpeg filter=lfs diff=lfs merge=lfs -text
4+
*.png filter=lfs diff=lfs merge=lfs -text
5+
*.gif filter=lfs diff=lfs merge=lfs -text
6+
*.bmp filter=lfs diff=lfs merge=lfs -text
7+
*.tiff filter=lfs diff=lfs merge=lfs -text
8+
*.webp filter=lfs diff=lfs merge=lfs -text
9+
# Videos
10+
*.mp4 filter=lfs diff=lfs merge=lfs -text
11+
*.avi filter=lfs diff=lfs merge=lfs -text
12+
*.mov filter=lfs diff=lfs merge=lfs -text
13+
*.mkv filter=lfs diff=lfs merge=lfs -text
14+
*.webm filter=lfs diff=lfs merge=lfs -text
15+
# Audio
16+
*.mp3 filter=lfs diff=lfs merge=lfs -text
17+
*.wav filter=lfs diff=lfs merge=lfs -text
18+
*.flac filter=lfs diff=lfs merge=lfs -text
19+
# Archives
20+
*.zip filter=lfs diff=lfs merge=lfs -text
21+
*.tar.gz filter=lfs diff=lfs merge=lfs -text
22+
*.rar filter=lfs diff=lfs merge=lfs -text
23+
*.7z filter=lfs diff=lfs merge=lfs -text
24+
# Documents
25+
*.pdf filter=lfs diff=lfs merge=lfs -text
26+
*.doc filter=lfs diff=lfs merge=lfs -text
27+
*.docx filter=lfs diff=lfs merge=lfs -text
28+
*.ppt filter=lfs diff=lfs merge=lfs -text
29+
*.pptx filter=lfs diff=lfs merge=lfs -text
30+
# Binaries
31+
*.exe filter=lfs diff=lfs merge=lfs -text
32+
*.dll filter=lfs diff=lfs merge=lfs -text
33+
*.so filter=lfs diff=lfs merge=lfs -text
34+
*.dylib filter=lfs diff=lfs merge=lfs -text
35+
# Large data files
36+
*.csv filter=lfs diff=lfs merge=lfs -text
37+
*.xml filter=lfs diff=lfs merge=lfs -text
38+
39+
# Test data files
40+
testdata/golden/*.json filter=lfs diff=lfs merge=lfs -text

.github/workflows/ci.yml

Lines changed: 55 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -41,9 +41,20 @@ jobs:
4141
- name: Run go vet
4242
run: go vet ./...
4343

44-
- name: Run tests
44+
- name: Generate basic test data
4545
run: |
46-
go test -v -race -timeout=300s -coverprofile=coverage.out ./...
46+
# Generate only basic test data for CI (avoid large files)
47+
go run cmd/testgen/main.go -variants=basic -output=./testdata/golden -verbose
48+
49+
- name: Run tests (excluding ultra rigor)
50+
run: |
51+
# Run all tests except ultra rigor to avoid CI timeouts and large file issues
52+
go test -v -race -timeout=300s -coverprofile=coverage.out -skip="TestGoldenUltraRigor|TestGoldenTrueRigor" ./...
53+
54+
- name: Run basic golden tests
55+
run: |
56+
# Run only basic golden tests in CI
57+
go test -v -timeout=60s ./internal/tests/golden/ -run TestGoldenBasic
4758
4859
- name: Generate coverage report
4960
run: |
@@ -57,11 +68,19 @@ jobs:
5768
name: codecov-umbrella
5869
fail_ci_if_error: false
5970

60-
- name: Run golangci-lint
61-
uses: golangci/golangci-lint-action@v4
62-
with:
63-
version: latest
64-
args: --timeout=5m
71+
- name: Install linting tools
72+
run: |
73+
go install honnef.co/go/tools/cmd/staticcheck@latest
74+
go install github.com/gordonklaus/ineffassign@latest
75+
76+
- name: Run linters
77+
run: |
78+
echo "Running staticcheck..."
79+
staticcheck ./...
80+
echo "Running ineffassign..."
81+
ineffassign ./...
82+
echo "Checking gofmt..."
83+
test -z "$(gofmt -l .)" || (echo "Code not formatted. Run 'make fmt' to fix." && exit 1)
6584
6685
# Security Scanning
6786
security:
@@ -85,13 +104,41 @@ jobs:
85104
- name: Run Gosec Security Scanner
86105
run: |
87106
go install github.com/securego/gosec/v2/cmd/gosec@latest
88-
gosec -no-fail -fmt sarif -out gosec.sarif ./...
107+
gosec -no-fail -fmt sarif -out gosec.sarif -conf .gosec.json ./...
89108
90109
- name: Upload SARIF file
91110
uses: github/codeql-action/upload-sarif@v3
92111
with:
93112
sarif_file: gosec.sarif
94113

114+
# Ultra Rigor Testing (Manual/Optional)
115+
ultra-rigor:
116+
name: Ultra Rigor Testing
117+
runs-on: ubuntu-latest
118+
if: github.event_name == 'workflow_dispatch' || contains(github.event.head_commit.message, '[ultra-rigor]')
119+
timeout-minutes: 60
120+
121+
steps:
122+
- name: Checkout code
123+
uses: actions/checkout@v4
124+
125+
- name: Set up Go
126+
uses: actions/setup-go@v5
127+
with:
128+
go-version: ${{ env.GO_VERSION }}
129+
cache: true
130+
131+
- name: Generate ultra rigor test data
132+
run: |
133+
# Generate ultra rigor test data (this may take several minutes)
134+
echo "Generating ultra rigor test data..."
135+
go run cmd/testgen/main.go -variants=ultra-rigor -output=./testdata/golden -verbose
136+
137+
- name: Run ultra rigor tests
138+
run: |
139+
# Run the full ultra rigor test suite
140+
go test -v -timeout=45m ./internal/tests/golden/ -run TestGoldenUltraRigor
141+
95142
# Build Binaries
96143
build:
97144
name: Build

.gitignore

Lines changed: 16 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -22,6 +22,11 @@ build/
2222
bin/
2323
dist/
2424

25+
# Application binaries
26+
testgen
27+
server
28+
print-service
29+
2530
# IDE files
2631
.vscode/
2732
.idea/
@@ -85,8 +90,17 @@ temp/
8590
.dockerignore
8691

8792
# Local configuration overrides
88-
configs/local.yaml
89-
configs/local.yml
93+
configs/*.yaml
94+
!configs/example.yaml
95+
!configs/development.yaml
96+
!configs/production.yaml
97+
98+
# Large test data files (generated at runtime)
99+
testdata/golden/ultra_rigor_golden_data.json/
100+
testdata/golden/true_rigor_golden_data.json/
101+
testdata/golden/rigor_golden_data.json/
102+
# Keep smaller test files for basic functionality
103+
!testdata/golden/*_golden_data.json
90104

91105
# Generated documentation
92106
docs/generated/

.golangci.yml

Lines changed: 0 additions & 16 deletions
This file was deleted.

.gosec.json

Lines changed: 45 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,45 @@
1+
{
2+
"exclude": {
3+
"G101": "Potential hardcoded credentials",
4+
"G102": "Bind to all interfaces",
5+
"G103": "Audit the use of unsafe block",
6+
"G104": "Audit errors not checked",
7+
"G106": "Audit the use of ssh.InsecureIgnoreHostKey",
8+
"G107": "Url provided to HTTP request as taint input",
9+
"G108": "Profiling endpoint automatically exposed on /debug/pprof",
10+
"G109": "Potential Integer overflow made by strconv.Atoi result conversion to int16/32",
11+
"G110": "Potential DoS vulnerability via decompression bomb",
12+
"G201": "SQL query construction using format string",
13+
"G202": "SQL query construction using string concatenation",
14+
"G203": "Use of unescaped data in HTML templates",
15+
"G204": "Audit use of command execution",
16+
"G301": "Poor file permissions used when creating a directory",
17+
"G302": "Poor file permissions used with chmod",
18+
"G303": "Creating tempfile using a predictable path",
19+
"G304": "File path provided as taint input",
20+
"G305": "File traversal when extracting zip/tar archive",
21+
"G306": "Poor file permissions used when writing to a new file",
22+
"G307": "Deferring a method which returns an error",
23+
"G401": "Detect the usage of DES, RC4, MD5 or SHA1",
24+
"G402": "Look for bad TLS connection settings",
25+
"G403": "Ensure minimum RSA key length of 2048 bits",
26+
"G404": "Insecure random number source (rand)",
27+
"G501": "Import blocklist: crypto/md5",
28+
"G502": "Import blocklist: crypto/des",
29+
"G503": "Import blocklist: crypto/rc4",
30+
"G504": "Import blocklist: net/http/cgi",
31+
"G505": "Import blocklist: crypto/sha1",
32+
"G601": "Implicit memory aliasing of items from a range statement"
33+
},
34+
"exclude_dirs": [
35+
"testdata",
36+
"internal/tests",
37+
"cmd/testgen",
38+
"test",
39+
"tests",
40+
"*_test.go"
41+
],
42+
"exclude_generated": true,
43+
"severity": "medium",
44+
"confidence": "medium"
45+
}

Makefile

Lines changed: 47 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -174,17 +174,59 @@ benchmark: ## Run benchmarks
174174
@echo "Running benchmarks..."
175175
@go test -v -bench=. -benchmem ./...
176176

177+
# =============================================================================
178+
# GOLDEN TEST DATA TARGETS
179+
# =============================================================================
180+
181+
.PHONY: generate-golden-data
182+
generate-golden-data: ## Generate golden test data variants
183+
@echo "Generating golden test data..."
184+
@go run cmd/testgen/main.go -output=./testdata/golden -verbose
185+
186+
.PHONY: generate-golden-basic
187+
generate-golden-basic: ## Generate basic golden test variants
188+
@echo "Generating basic golden test data..."
189+
@go run cmd/testgen/main.go -variants=basic -output=./testdata/golden -verbose
190+
191+
.PHONY: generate-golden-rigor
192+
generate-golden-rigor: ## Generate enhanced rigor golden test data
193+
@echo "Generating enhanced rigor golden test data..."
194+
./testgen -variant=rigor -output=testdata/golden/rigor_golden_data.json -verbose
195+
196+
.PHONY: generate-golden-true-rigor
197+
generate-golden-true-rigor: ## Generate true rigor golden test data
198+
@echo "Generating true rigor golden test data..."
199+
./testgen -variant=true-rigor -output=testdata/golden/true_rigor_golden_data.json -verbose
200+
201+
.PHONY: generate-golden-edge
202+
generate-golden-edge: ## Generate edge case golden test variants
203+
@echo "Generating edge case golden test data..."
204+
@go run cmd/testgen/main.go -variants=edge -output=./testdata/golden -verbose
205+
206+
.PHONY: generate-golden-stress
207+
generate-golden-stress: ## Generate stress test golden variants
208+
@echo "Generating stress test golden data..."
209+
@go run cmd/testgen/main.go -variants=stress -output=./testdata/golden -verbose
210+
211+
.PHONY: test-golden
212+
test-golden: generate-golden-data ## Generate and run golden tests
213+
@echo "Running golden tests..."
214+
@go test -v -tags=golden ./internal/tests/golden/...
215+
177216
# =============================================================================
178217
# CODE QUALITY TARGETS
179218
# =============================================================================
180219

181220
.PHONY: lint
182221
lint: ## Run linters
183-
@echo "Running linters..."
184-
@which golangci-lint > /dev/null || (echo "Installing golangci-lint..." && \
185-
curl -sSfL https://raw.githubusercontent.com/golangci/golangci-lint/master/install.sh | \
186-
sh -s -- -b $(shell go env GOPATH)/bin $(GOLANGCI_LINT_VERSION))
187-
@golangci-lint run
222+
@echo "Running go vet..."
223+
@go vet ./...
224+
@echo "Running staticcheck..."
225+
@staticcheck ./...
226+
@echo "Running ineffassign..."
227+
@ineffassign ./...
228+
@echo "Checking gofmt..."
229+
@test -z "$$(gofmt -l .)" || (echo "Code not formatted. Run 'make fmt' to fix." && exit 1)
188230

189231
.PHONY: fmt
190232
fmt: ## Format code

0 commit comments

Comments
 (0)