Source identity
| Field | Recorded value |
|---|---|
| Source type | GitHub source |
| Original record | Janady13/missionmatch / internal/platform/benchimport/structured_source_test.go |
| Date | Not specified in source |
| Repository | Janady13/missionmatch |
| Revision | 1e9249840a4302ec82e123b9c9cb6f75badea3e4 |
| Branch | master |
| Path or archive member | internal/platform/benchimport/structured_source_test.go |
| Original SHA-256 | fd950991848d09a6d78718ccfecb72439effd52cf3770b8592b28c8a728a54ca |
| Git blob SHA | 0233157e4f8cdeacdcefc3b2d40de2b4d81e5f16 |
| Reading-copy SHA-256 | fd950991848d09a6d78718ccfecb72439effd52cf3770b8592b28c8a728a54ca |
Every recorded occurrence
These 23 records contain identical original source bytes. Their paths and revisions remain part of the archive.
| Original record | Branch or archive | Revision / identifier | Original location |
|---|---|---|---|
| Janady13/missionmatch / internal/platform/benchimport/structured_source_test.go | master | 1e9249840a4302ec82e123b9c9cb6f75badea3e4 | Open original |
| Janady13/missionmatch / internal/platform/benchimport/structured_source_test.go | feature/aioe-upgrade | 2178e7298d0e5d9af83afa12402fd587f0ba6ed8 | Open original |
| Janady13/missionmatch / internal/platform/benchimport/structured_source_test.go | m5-price-to-win | 41000ad30fff4129fdaf5ec84e15ba14c27d4890 | Open original |
| Janady13/missionmatch / internal/platform/benchimport/structured_source_test.go | collision-deconfliction | 4ee5a09972608ed89f8377c6665542d5f450f0a6 | Open original |
| Janady13/missionmatch / internal/platform/benchimport/structured_source_test.go | graphrag-foundation | b0ddeb9f633fd138d09309d1a17b7d13bc3a67f7 | Open original |
| Janady13/missionmatch / internal/platform/benchimport/structured_source_test.go | time-to-fill-survival | b66e1e505863d4f17741a4b9ede73509e45bd6c6 | Open original |
| Janady13/missionmatch / internal/platform/benchimport/structured_source_test.go | mag-substrate | b82c7100a492dec67dfd1eda6b3f53def859be35 | Open original |
| Janady13/missionmatch / internal/platform/benchimport/structured_source_test.go | capture-readiness | bae6af7cb2997e819174a9e9cfff5e16067a1975 | Open original |
| Janady13/missionmatch / internal/platform/benchimport/structured_source_test.go | phase2-connectors | e038d4c687aec16f8bd9bc4d907eea14d91f8704 | Open original |
| Janady13/missionmatch / internal/platform/benchimport/structured_source_test.go | presentation-readiness | eb574acaa29d71ce4d0f852572e87c275c79fdb7 | Open original |
| Janady13/missionmatch / internal/platform/benchimport/structured_source_test.go | ws9-bench-ingestion | f585a9ef32fa554663ce1fba9a414a54b6e49cf0 | Open original |
| Janady13/missionmatch / internal/platform/benchimport/structured_source_test.go | vendor-intelligence | fe9796a19c261951d3f2565206c0c1b5ac294465 | Open original |
| Janady13/missionmatch / internal/platform/benchimport/structured_source_test.go | collision-deconfliction | 4ee5a09972608ed89f8377c6665542d5f450f0a6 | Open original |
| Janady13/missionmatch / internal/platform/benchimport/structured_source_test.go | m5-price-to-win | 41000ad30fff4129fdaf5ec84e15ba14c27d4890 | Open original |
| Janady13/missionmatch / internal/platform/benchimport/structured_source_test.go | master | 1e9249840a4302ec82e123b9c9cb6f75badea3e4 | Open original |
| Janady13/missionmatch / internal/platform/benchimport/structured_source_test.go | mag-substrate | b82c7100a492dec67dfd1eda6b3f53def859be35 | Open original |
| Janady13/missionmatch / internal/platform/benchimport/structured_source_test.go | time-to-fill-survival | b66e1e505863d4f17741a4b9ede73509e45bd6c6 | Open original |
| Janady13/missionmatch / internal/platform/benchimport/structured_source_test.go | graphrag-foundation | b0ddeb9f633fd138d09309d1a17b7d13bc3a67f7 | Open original |
| Janady13/missionmatch / internal/platform/benchimport/structured_source_test.go | ws9-bench-ingestion | f585a9ef32fa554663ce1fba9a414a54b6e49cf0 | Open original |
| Janady13/missionmatch / internal/platform/benchimport/structured_source_test.go | presentation-readiness | eb574acaa29d71ce4d0f852572e87c275c79fdb7 | Open original |
| Janady13/missionmatch / internal/platform/benchimport/structured_source_test.go | phase2-connectors | e038d4c687aec16f8bd9bc4d907eea14d91f8704 | Open original |
| Janady13/missionmatch / internal/platform/benchimport/structured_source_test.go | feature/aioe-upgrade | 2178e7298d0e5d9af83afa12402fd587f0ba6ed8 | Open original |
| Janady13/missionmatch / internal/platform/benchimport/structured_source_test.go | capture-readiness | bae6af7cb2997e819174a9e9cfff5e16067a1975 | Open original |
Recovered source transcript
Download complete source text ↓176 lines · 5.8 KB
package benchimport
import (
"context"
"os"
"path/filepath"
"strings"
"testing"
)
// TestCSVColumnMapping proves the CSV decoder maps the standard bench columns by header name onto a
// BenchRecord, splits the skill, cert, and agency lists, and routes the email and phone only to the dedup
// contact fields, never to the title.
func TestCSVColumnMapping(t *testing.T) {
csv := strings.Join([]string{
"name,location,title,skills,certs,agencies,years,clearance,email,phone,external_id",
`John Smith,"Honolulu, HI",Cyber Security Engineer,Python;Splunk;RMF,CISSP;Security+,Air Force;NSA,12,secret,john.smith@example.com,808-555-0100,bench-1`,
}, "\n")
dir := t.TempDir()
path := filepath.Join(dir, "roster.csv")
if err := os.WriteFile(path, []byte(csv), 0o644); err != nil {
t.Fatalf("write csv: %v", err)
}
var got []BenchRecord
res, err := NewStructuredSource().Profiles(context.Background(), path, func(rec BenchRecord, batch string) error {
got = append(got, rec)
if batch != "roster.csv" {
t.Fatalf("expected batch roster.csv, got %q", batch)
}
return nil
})
if err != nil {
t.Fatalf("Profiles csv: %v", err)
}
if res.Mapped != 1 || len(got) != 1 {
t.Fatalf("expected 1 mapped row, got mapped=%d records=%d", res.Mapped, len(got))
}
r := got[0]
if r.FullName != "John Smith" {
t.Fatalf("name mapping: got %q", r.FullName)
}
if r.JobTitle != "Cyber Security Engineer" {
t.Fatalf("title mapping: got %q", r.JobTitle)
}
if r.Location != "Honolulu, HI" {
t.Fatalf("location mapping: got %q", r.Location)
}
if !containsStr(r.Skills, "Python") || !containsStr(r.Skills, "RMF") {
t.Fatalf("skill list mapping: got %v", r.Skills)
}
if !containsStr(r.Certs, "CISSP") {
t.Fatalf("cert list mapping: got %v", r.Certs)
}
if !containsStr(r.Agencies, "Air Force") {
t.Fatalf("agency list mapping: got %v", r.Agencies)
}
if r.Years != 12 {
t.Fatalf("years mapping: got %d", r.Years)
}
if r.ClearanceCode != "secret" {
t.Fatalf("clearance triage code mapping: got %q", r.ClearanceCode)
}
if r.Email != "john.smith@example.com" {
t.Fatalf("email dedup field mapping: got %q", r.Email)
}
// The email and phone never ride into the title.
if strings.Contains(r.JobTitle, "@") || strings.Contains(r.JobTitle, "555") {
t.Fatalf("contact info leaked into the title: %q", r.JobTitle)
}
}
// TestCSVMalformedRowSkip proves a malformed row (here a bare quote in a non quoted field) is skipped and
// counted, while the well formed rows around it still map, so one bad row never aborts the batch.
func TestCSVMalformedRowSkip(t *testing.T) {
csv := strings.Join([]string{
"name,skills,clearance",
"Good One,Python;SIEM,secret",
`Bad"Row,x,secret`,
"Good Two,RMF;ATO,top_secret",
}, "\n")
dir := t.TempDir()
path := filepath.Join(dir, "roster.csv")
if err := os.WriteFile(path, []byte(csv), 0o644); err != nil {
t.Fatalf("write csv: %v", err)
}
var mapped []BenchRecord
res, err := NewStructuredSource().Profiles(context.Background(), path, func(rec BenchRecord, batch string) error {
mapped = append(mapped, rec)
return nil
})
if err != nil {
t.Fatalf("Profiles csv: %v", err)
}
if res.Skipped < 1 {
t.Fatalf("expected at least one skipped malformed row, got skipped=%d", res.Skipped)
}
if len(mapped) < 2 {
t.Fatalf("expected the two good rows to map around the bad row, got %d", len(mapped))
}
for _, r := range mapped {
if r.FullName == "" {
t.Fatalf("a mapped row lost its name: %+v", r)
}
}
}
// TestCSVEmptyRowSkip proves a row with no scoring signal (no skills, no clearance, no certs, no years) is
// skipped so a header only or blank profile is not imported.
func TestCSVEmptyRowSkip(t *testing.T) {
csv := strings.Join([]string{
"name,skills,clearance",
"Signal Person,Python,secret",
"No Signal Person,,",
}, "\n")
dir := t.TempDir()
path := filepath.Join(dir, "roster.csv")
if err := os.WriteFile(path, []byte(csv), 0o644); err != nil {
t.Fatalf("write csv: %v", err)
}
var mapped int
res, err := NewStructuredSource().Profiles(context.Background(), path, func(rec BenchRecord, batch string) error {
mapped++
return nil
})
if err != nil {
t.Fatalf("Profiles csv: %v", err)
}
if mapped != 1 {
t.Fatalf("expected only the signal row to map, got %d", mapped)
}
if res.Skipped != 1 {
t.Fatalf("expected the no signal row skipped, got skipped=%d", res.Skipped)
}
}
// TestJSONLMapping proves the JSONL decoder maps one object per line, folds the alias keys, and skips a
// line that does not parse.
func TestJSONLMapping(t *testing.T) {
jsonl := strings.Join([]string{
`{"name":"Ana Reyes","location":"Albuquerque, NM","title":"Data Scientist","skills":["Python","Machine Learning"],"certs":["CISSP"],"years":7,"clearance":"ts_sci","email":"ana@example.com","external_id":"b2"}`,
`{ this is not valid json `,
`{"full_name":"Lee Park","skills":["RMF","ATO"],"clearance_level":"secret"}`,
}, "\n")
dir := t.TempDir()
path := filepath.Join(dir, "roster.jsonl")
if err := os.WriteFile(path, []byte(jsonl), 0o644); err != nil {
t.Fatalf("write jsonl: %v", err)
}
var got []BenchRecord
res, err := NewStructuredSource().Profiles(context.Background(), path, func(rec BenchRecord, batch string) error {
got = append(got, rec)
return nil
})
if err != nil {
t.Fatalf("Profiles jsonl: %v", err)
}
if res.Skipped < 1 {
t.Fatalf("expected the malformed json line skipped, got skipped=%d", res.Skipped)
}
if len(got) != 2 {
t.Fatalf("expected 2 mapped rows, got %d", len(got))
}
if got[0].FullName != "Ana Reyes" || got[0].JobTitle != "Data Scientist" {
t.Fatalf("first jsonl row mapping: %+v", got[0])
}
if got[0].ClearanceCode != "ts_sci" {
t.Fatalf("first jsonl clearance triage code: %q", got[0].ClearanceCode)
}
if got[1].FullName != "Lee Park" || !containsStr(got[1].Skills, "RMF") {
t.Fatalf("second jsonl alias mapping: %+v", got[1])
}
}