Skip to content

Commit

Permalink
Implement and test Contains() function
Browse files Browse the repository at this point in the history
  • Loading branch information
Mikael Schultz committed Sep 6, 2023
1 parent ec00c77 commit 8219716
Show file tree
Hide file tree
Showing 2 changed files with 75 additions and 0 deletions.
12 changes: 12 additions & 0 deletions oui/oui.go
Original file line number Diff line number Diff line change
Expand Up @@ -51,6 +51,18 @@ type Oui struct {
Address string // The organization street address
}

// Contains returns true if the OUI entry contains the specified string
// in any of the OUI fields. The search is case-insensitive.
func (o *Oui) Contains(s string) bool {
// Search is case-insensitive so convert the search string to lowercase
s = strings.ToLower(s)

// Check if the search string is contained in any of the OUI fields
return strings.Contains(strings.ToLower(o.Assignment), s) ||
strings.Contains(strings.ToLower(o.Organization), s) ||
strings.Contains(strings.ToLower(o.Address), s)
}

// The OUI database
type OuiDb struct {
// The OUI database
Expand Down
63 changes: 63 additions & 0 deletions oui/oui_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -261,3 +261,66 @@ MA-L,222222,Texas Instruments,12500 TI Blvd Dallas TX US 75243`
}
}
}

// TestOuiContains tests the Contains function of the Oui type.
func TestOuiContains(t *testing.T) {
// Create a test CSV database
entry := oui.Oui{
Assignment: "1A2B3C",
Organization: "Banana, Inc.",
Address: "1 Infinite Fruity Loop CA US 12014",
}

// Setup test cases
testCases := []struct {
name string
input string
expected bool
}{
{
name: "FullAssignment",
input: "1A2B3C", expected: true,
},
{
name: "PartialAssignment",
input: "1A2B3", expected: true,
},
{
name: "PartialAssignmentLowercase",
input: "1a2b3", expected: true,
},
{
name: "FullOrganization",
input: "Banana, Inc.", expected: true,
},
{
name: "PartialOrganizationLowercase",
input: "banana", expected: true,
},
{
name: "FullAddress",
input: "1 Infinite Fruity Loop CA US 12014", expected: true,
},
{
name: "PartialAddressUppercase",
input: "LOOP", expected: true,
},
{
name: "PartialAddressLowercase",
input: "fruit", expected: true,
},
{
name: "NotFound",
input: "111222", expected: false},
}

// Loop through the test cases
for _, testCase := range testCases {
t.Run(testCase.name, func(t *testing.T) {
// Verify that the database was loaded correctly
if entry.Contains(testCase.input) != testCase.expected {
t.Errorf("expected %v, got %v", testCase.expected, entry.Contains(testCase.input))
}
})
}
}

0 comments on commit 8219716

Please sign in to comment.