mirror of
https://github.com/on4kjm/FLEcli.git
synced 2025-01-18 13:01:09 +01:00
Validate Sota chaser log
This commit is contained in:
parent
4732960e5a
commit
8d03018796
5 changed files with 78 additions and 14 deletions
|
@ -16,7 +16,7 @@ But is also the alibi to learn and explore GO.
|
|||
## Installing
|
||||
The tool is installed by downloading and unpacking the archive for your operating system.
|
||||
|
||||
A version is available for Windows, MacOS, Linux and ARM (RaspeberyPi).
|
||||
A version is available for Windows, MacOS, Linux and ARM (RaspberryPi).
|
||||
Most of them are available as 32 or 64 bit applications.
|
||||
A docker version is also available.
|
||||
|
||||
|
@ -29,11 +29,11 @@ Detailed installation instructions can be found [at this page](doc/install.md).
|
|||
|
||||
Detailed explanations can be found [on this page](doc/usage.md).
|
||||
|
||||
Most comon use cases are described hereafter as examples.
|
||||
Most common use cases are described hereafter as examples.
|
||||
|
||||
### Example: validate the FLE syntax of a file
|
||||
|
||||
To load and validate the FLE formated file (`myActivation.txt`:
|
||||
To load and validate the FLE formatted file (`myActivation.txt`):
|
||||
|
||||
```
|
||||
./FLEcli load myActivation.txt
|
||||
|
|
|
@ -1,6 +1,13 @@
|
|||
# What's new?
|
||||
|
||||
## v0.1.2
|
||||
## v0.1.3
|
||||
|
||||
* Enable FLEcli to be used to generate CSV chaser logs
|
||||
* Fix the display for longer calls (issue #61)
|
||||
|
||||
## Previous releases
|
||||
|
||||
### v0.1.2
|
||||
|
||||
* DATE keyword is now optional
|
||||
* Date can have several delimiter ("-", "/", ".", or " ")
|
||||
|
@ -11,8 +18,6 @@
|
|||
* Time is now correctly inferred when start and end of gap is in the same minute
|
||||
* Correct some typos and bugs
|
||||
|
||||
## Previous releases
|
||||
|
||||
### v0.1.1
|
||||
* Improved test coverage
|
||||
* Improved build automation
|
||||
|
|
|
@ -59,9 +59,11 @@ func validateDataForSotaCsv(loadedLogFile []LogLine) error {
|
|||
return fmt.Errorf("No QSO found")
|
||||
}
|
||||
|
||||
isNoMySota := false
|
||||
//MySOTA and MyCall are header values. If missing on the first line, it will be missing at every line
|
||||
if loadedLogFile[0].MySOTA == "" {
|
||||
return fmt.Errorf("Missing MY-SOTA reference")
|
||||
//if not set, we might be dealing with a chaser log
|
||||
isNoMySota = true
|
||||
}
|
||||
if loadedLogFile[0].MyCall == "" {
|
||||
return fmt.Errorf("Missing MyCall")
|
||||
|
@ -109,6 +111,21 @@ func validateDataForSotaCsv(loadedLogFile []LogLine) error {
|
|||
}
|
||||
errorsBuffer.WriteString(fmt.Sprintf("missing QSO time %s", errorLocation))
|
||||
}
|
||||
//FIXME: if isNoMySota and MySota defined means that it was defined later in the log file
|
||||
if (isNoMySota && loadedLogFile[i].MySOTA != "") {
|
||||
if errorsBuffer.String() != "" {
|
||||
errorsBuffer.WriteString(fmt.Sprintf(", "))
|
||||
}
|
||||
errorsBuffer.WriteString(fmt.Sprintf("encountered an unexpexted MySota reference while processing what should be a chaser log %s", errorLocation))
|
||||
}
|
||||
|
||||
|
||||
if (isNoMySota && loadedLogFile[i].SOTA == "") {
|
||||
if errorsBuffer.String() != "" {
|
||||
errorsBuffer.WriteString(fmt.Sprintf(", "))
|
||||
}
|
||||
errorsBuffer.WriteString(fmt.Sprintf("missing SOTA reference while attempting to process chaser log %s", errorLocation))
|
||||
}
|
||||
}
|
||||
if errorsBuffer.String() != "" {
|
||||
return fmt.Errorf(errorsBuffer.String())
|
||||
|
|
|
@ -15,7 +15,7 @@ func Test_validateDataForSotaCsv(t *testing.T) {
|
|||
want error
|
||||
}{
|
||||
{
|
||||
"Happy Case",
|
||||
"Happy Case (activator)",
|
||||
args{loadedLogFile: []LogLine{
|
||||
{Date: "date", MyCall: "myCall", MySOTA: "mySota", Mode: "mode", Band: "band", Time: "time", Call: "call"},
|
||||
{Date: "date", MyCall: "myCall", MySOTA: "mySota", Mode: "mode", Band: "band", Time: "time", Call: "call"},
|
||||
|
@ -23,6 +23,15 @@ func Test_validateDataForSotaCsv(t *testing.T) {
|
|||
},
|
||||
nil,
|
||||
},
|
||||
{
|
||||
"Happy Case (chaser)",
|
||||
args{loadedLogFile: []LogLine{
|
||||
{Date: "date", MyCall: "myCall", MySOTA: "", Mode: "mode", Band: "band", Time: "time", Call: "call", SOTA: "Sota1"},
|
||||
{Date: "date", MyCall: "myCall", MySOTA: "", Mode: "mode", Band: "band", Time: "time", Call: "call", SOTA: "Sota2"},
|
||||
{Date: "date", MyCall: "myCall", MySOTA: "", Mode: "mode", Band: "band", Time: "time", Call: "call", SOTA: "Sota3"}},
|
||||
},
|
||||
nil,
|
||||
},
|
||||
{
|
||||
"Missing Date",
|
||||
args{loadedLogFile: []LogLine{
|
||||
|
@ -42,13 +51,31 @@ func Test_validateDataForSotaCsv(t *testing.T) {
|
|||
fmt.Errorf("Missing MyCall"),
|
||||
},
|
||||
{
|
||||
"Missing MySota",
|
||||
"Neither Activator nor Chaser",
|
||||
args{loadedLogFile: []LogLine{
|
||||
{Date: "date", MyCall: "myCall", MySOTA: "", Mode: "mode", Band: "band", Time: "time", Call: "call"},
|
||||
{Date: "date", MyCall: "myCall", MySOTA: "", Mode: "mode", Band: "band", Time: "time", Call: "call"},
|
||||
{Date: "date", MyCall: "myCall", MySOTA: "", Mode: "mode", Band: "band", Time: "time", Call: "call"}},
|
||||
{Date: "date", MyCall: "myCall", MySOTA: "", Mode: "mode", Band: "band", Time: "12:01", Call: "call"},
|
||||
{Date: "date", MyCall: "myCall", MySOTA: "", Mode: "mode", Band: "band", Time: "12:02", Call: "call"},
|
||||
{Date: "date", MyCall: "myCall", MySOTA: "", Mode: "mode", Band: "band", Time: "12:03", Call: "call"}},
|
||||
},
|
||||
fmt.Errorf("Missing MY-SOTA reference"),
|
||||
fmt.Errorf("missing SOTA reference while attempting to process chaser log for log entry at 12:01 (#1), missing SOTA reference while attempting to process chaser log for log entry at 12:02 (#2), missing SOTA reference while attempting to process chaser log for log entry at 12:03 (#3)"),
|
||||
},
|
||||
{
|
||||
"SOTA Chaser log with one reference missing",
|
||||
args{loadedLogFile: []LogLine{
|
||||
{Date: "date", MyCall: "myCall", MySOTA: "", Mode: "mode", Band: "band", Time: "12:01", Call: "call", SOTA: "Sota1"},
|
||||
{Date: "date", MyCall: "myCall", MySOTA: "", Mode: "mode", Band: "band", Time: "12:02", Call: "call"},
|
||||
{Date: "date", MyCall: "myCall", MySOTA: "", Mode: "mode", Band: "band", Time: "12:03", Call: "call", SOTA: "Sota3"}},
|
||||
},
|
||||
fmt.Errorf("missing SOTA reference while attempting to process chaser log for log entry at 12:02 (#2)"),
|
||||
},
|
||||
{
|
||||
"SOTA Chaser log with mySota redefinition",
|
||||
args{loadedLogFile: []LogLine{
|
||||
{Date: "date", MyCall: "myCall", MySOTA: "", Mode: "mode", Band: "band", Time: "12:01", Call: "call", SOTA: "Sota1"},
|
||||
{Date: "date", MyCall: "myCall", MySOTA: "mySota", Mode: "mode", Band: "band", Time: "12:02", Call: "call", SOTA: "Sota2"},
|
||||
{Date: "date", MyCall: "myCall", MySOTA: "", Mode: "mode", Band: "band", Time: "12:03", Call: "call", SOTA: "Sota3"}},
|
||||
},
|
||||
fmt.Errorf("encountered an unexpexted MySota reference while processing what should be a chaser log for log entry at 12:02 (#2)"),
|
||||
},
|
||||
{
|
||||
"Misc. missing data (Band, Time, Mode, Call)",
|
||||
|
|
|
@ -61,13 +61,23 @@ func Test_buildCsv(t *testing.T) {
|
|||
{MyCall: "ON4KJM/P", Call: "S57LC", Date: "2020-05-24", Time: "1310", Band: "20m", Frequency: "14.045", Mode: "CW", RSTsent: "599", RSTrcvd: "599", MySOTA: "ON/ON-001", Operator: "ON4KJM", Nickname: "ONFF-0259-1", SOTA: "ON/ON-002"},
|
||||
{MyCall: "ON4KJM/P", Call: "ON4LY", Date: "2020-05-24", Time: "1312", Band: "20m", Mode: "CW", RSTsent: "559", RSTrcvd: "599", MySOTA: "ON/ON-001", Operator: "ON4KJM", Comment: "QSL Message"},
|
||||
}
|
||||
//add case with no SOTA and with or no comment
|
||||
|
||||
expectedOutput2 := []string{
|
||||
"V2,ON4KJM/P,ON/ON-001,24/05/20,1310,14MHz,CW,S57LC,ON/ON-002",
|
||||
"V2,ON4KJM/P,ON/ON-001,24/05/20,1312,14MHz,CW,ON4LY,,QSL Message",
|
||||
}
|
||||
|
||||
//Chaser log
|
||||
chaserLog := []LogLine{
|
||||
{MyCall: "ON4KJM/P", Call: "S57LC", Date: "2020-05-24", Time: "1310", Band: "20m", Frequency: "14.045", Mode: "CW", RSTsent: "599", RSTrcvd: "599", Operator: "ON4KJM", Nickname: "ONFF-0259-1", SOTA: "ON/ON-002"},
|
||||
{MyCall: "ON4KJM/P", Call: "ON4LY", Date: "2020-05-24", Time: "1312", Band: "20m", Mode: "CW", RSTsent: "559", RSTrcvd: "599", Operator: "ON4KJM", Comment: "QSL Message", SOTA: "ON/ON-003"},
|
||||
}
|
||||
|
||||
expectedChaserOutput3 := []string{
|
||||
"V2,ON4KJM/P,,24/05/20,1310,14MHz,CW,S57LC,ON/ON-002",
|
||||
"V2,ON4KJM/P,,24/05/20,1312,14MHz,CW,ON4LY,ON/ON-003,QSL Message",
|
||||
}
|
||||
|
||||
type args struct {
|
||||
fullLog []LogLine
|
||||
}
|
||||
|
@ -86,6 +96,11 @@ func Test_buildCsv(t *testing.T) {
|
|||
args{fullLog: sampleFilledLog2},
|
||||
expectedOutput2,
|
||||
},
|
||||
{
|
||||
"Chaser Log",
|
||||
args{fullLog: chaserLog},
|
||||
expectedChaserOutput3,
|
||||
},
|
||||
}
|
||||
for _, tt := range tests {
|
||||
t.Run(tt.name, func(t *testing.T) {
|
||||
|
|
Loading…
Reference in a new issue