package constant import "testing" // Allowlist существует ровно для того, чтобы забытый ключ был закрыт, а не // открыт. Тест закрепляет обе стороны этого утверждения поимённо. func TestInternalKeysAreNeitherReadableNorWritable(t *testing.T) { for _, key := range InternalConfigKeys() { if IsPublicReadableConfigKey(key) { t.Errorf("внутренний ключ %s доступен на чтение через API", key) } if IsPublicWritableConfigKey(key) { t.Errorf("внутренний ключ %s доступен на запись через API", key) } } } func TestSecretKeysAreListedAsInternal(t *testing.T) { required := []string{ JwtSecret, PeerSecretKey, PeerSecretEncryptionKey, Hysteria2TrafficStatsSecret, } internal := make(map[string]struct{}, len(InternalConfigKeys())) for _, key := range InternalConfigKeys() { internal[key] = struct{}{} } for _, key := range required { if _, ok := internal[key]; !ok { t.Errorf("секрет %s не объявлен внутренним ключом", key) } } } func TestOperatorSettingsRemainAvailable(t *testing.T) { if !IsPublicReadableConfigKey(ResetTrafficCron) { t.Errorf("пользовательская настройка %s недоступна на чтение", ResetTrafficCron) } if !IsPublicWritableConfigKey(ResetTrafficCron) { t.Errorf("пользовательская настройка %s недоступна на запись", ResetTrafficCron) } } // Ключи, удалённые как мёртвое состояние, не должны вернуться в API «по // инерции» вместе с восстановлением константы. Проверка идёт по строковым // литералам: соответствующих констант в коде уже нет, и появиться они не // должны. func TestRemovedKeysStayClosed(t *testing.T) { for _, key := range []string{ "HYSTERIA2_ENABLE", "HYSTERIA2_CONFIG", "HYSTERIA2_TRAFFIC_TIME", "HYSTERIA2_CONFIG_REMARK", } { if IsPublicReadableConfigKey(key) { t.Errorf("удалённый ключ %s снова доступен на чтение", key) } if IsPublicWritableConfigKey(key) { t.Errorf("удалённый ключ %s снова доступен на запись", key) } } } // Право записи без права чтения означает настройку, которую оператор может // изменить, но не может увидеть. func TestWritableIsSubsetOfReadable(t *testing.T) { for _, key := range PublicWritableConfigKeys() { if !IsPublicReadableConfigKey(key) { t.Errorf("ключ %s можно записать, но нельзя прочитать", key) } } } func TestUnknownKeyIsClosedByDefault(t *testing.T) { if IsPublicReadableConfigKey("SOME_FUTURE_KEY") || IsPublicWritableConfigKey("SOME_FUTURE_KEY") { t.Fatal("неизвестный ключ обязан быть закрыт по умолчанию") } }