init
This commit is contained in:
96
parser_test.go
Normal file
96
parser_test.go
Normal file
@@ -0,0 +1,96 @@
|
||||
package main
|
||||
|
||||
import (
|
||||
"strings"
|
||||
"testing"
|
||||
)
|
||||
|
||||
func TestParseConfigFindsShares(t *testing.T) {
|
||||
doc, err := ParseConfig(`
|
||||
# comment
|
||||
[global]
|
||||
workgroup = WORKGROUP
|
||||
|
||||
[media]
|
||||
path = /srv/media
|
||||
valid users = alice, bob
|
||||
guest ok = no
|
||||
`)
|
||||
if err != nil {
|
||||
t.Fatalf("ParseConfig() error = %v", err)
|
||||
}
|
||||
|
||||
shares := doc.ShareSections()
|
||||
if len(shares) != 1 {
|
||||
t.Fatalf("expected 1 share, got %d", len(shares))
|
||||
}
|
||||
|
||||
cfg := ShareFromSection(shares[0])
|
||||
if cfg.Name != "media" {
|
||||
t.Fatalf("expected share name media, got %q", cfg.Name)
|
||||
}
|
||||
if cfg.Path != "/srv/media" {
|
||||
t.Fatalf("expected path /srv/media, got %q", cfg.Path)
|
||||
}
|
||||
if strings.Join(cfg.ValidUsers, ",") != "alice,bob" {
|
||||
t.Fatalf("expected users alice,bob, got %v", cfg.ValidUsers)
|
||||
}
|
||||
}
|
||||
|
||||
func TestBuildShareSectionUpdatesValues(t *testing.T) {
|
||||
section := &Section{
|
||||
Name: "public",
|
||||
Lines: []Line{
|
||||
{Key: "path", Value: "/old", IsKV: true},
|
||||
{Key: "comment", Value: "old", IsKV: true},
|
||||
},
|
||||
}
|
||||
|
||||
updated := BuildShareSection(section, ShareConfig{
|
||||
Name: "public",
|
||||
Path: "/srv/public",
|
||||
Comment: "",
|
||||
Browseable: "yes",
|
||||
ReadOnly: "no",
|
||||
GuestOK: "yes",
|
||||
ValidUsers: []string{"alice"},
|
||||
})
|
||||
|
||||
cfg := ShareFromSection(updated)
|
||||
if cfg.Path != "/srv/public" {
|
||||
t.Fatalf("expected updated path, got %q", cfg.Path)
|
||||
}
|
||||
if cfg.Comment != "" {
|
||||
t.Fatalf("expected comment removed, got %q", cfg.Comment)
|
||||
}
|
||||
if strings.Join(cfg.ValidUsers, ",") != "alice" {
|
||||
t.Fatalf("expected alice, got %v", cfg.ValidUsers)
|
||||
}
|
||||
}
|
||||
|
||||
func TestSerializeProducesSectionHeaders(t *testing.T) {
|
||||
doc := &Document{
|
||||
Preamble: []string{"# smb.conf"},
|
||||
Sections: []*Section{
|
||||
BuildShareSection(nil, ShareConfig{
|
||||
Name: "docs",
|
||||
Path: "/srv/docs",
|
||||
Browseable: "yes",
|
||||
ReadOnly: "no",
|
||||
GuestOK: "no",
|
||||
}),
|
||||
},
|
||||
}
|
||||
|
||||
out := doc.Serialize()
|
||||
for _, want := range []string{
|
||||
"# smb.conf",
|
||||
"[docs]",
|
||||
"path = /srv/docs",
|
||||
"browseable = yes",
|
||||
} {
|
||||
if !strings.Contains(out, want) {
|
||||
t.Fatalf("serialized output missing %q:\n%s", want, out)
|
||||
}
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user