diff --git a/README.md b/README.md index adb4563..c8c8539 100644 --- a/README.md +++ b/README.md @@ -143,4 +143,14 @@ bash scripts/run.sh Добавить нового пользователя: ``` ./build/release/add_user -username test -password 1234 -``` \ No newline at end of file +``` + +## Запуск фаззинга + +Сначала соберите приложение и инициализируйте тестовую базу (init_users). + +Далее: + +1. cd myfuzz + +2. ./run_fuzz.sh diff --git a/myfuzz/myfuzz_test.go b/myfuzz/myfuzz_test.go new file mode 100644 index 0000000..18567bf --- /dev/null +++ b/myfuzz/myfuzz_test.go @@ -0,0 +1,35 @@ +package myfuzz + +import ( + "testing" + + "linux-auth/internal/auth" + "linux-auth/internal/db" +) + +func FuzzAuth(f *testing.F) { + err := db.Init("test_data.db") + if err != nil { + f.Fatalf("DB init error: %v", err) + } + f.Cleanup(func() { + db.Close() + }) + + f.Add("admin", "admin") + f.Add("user", "password") + f.Add("", "") + + f.Fuzz(func(t *testing.T, username string, password string) { + ok, err := auth.Authenticate(username, password) + if err != nil { + t.Errorf("For {username} {%q} and {password} {%q} error: %v", username, password, err) + } + if ok { + if (username == "admin" && password == "admin123") || (username == "user1" && password == "password1") { + return + } + t.Errorf("Unexpected login for {username} {%q} and {password} {%q}", username, password) + } + }) +} diff --git a/myfuzz/run_fuzz.sh b/myfuzz/run_fuzz.sh new file mode 100755 index 0000000..5b3b1d4 --- /dev/null +++ b/myfuzz/run_fuzz.sh @@ -0,0 +1,5 @@ +#!/bin/bash + +cp ../data/users.db test_data.db + +go test -fuzz=FuzzAuth -fuzztime=5m --parallel=1