# Test Raporu - Yonetim Konsolu + Sunucu

**Tarih:** 28.09.2026
**Kapsam:** Docker sunucu (Go/Fiber/Mongo) + Fikocad (C++)
**Sonuc:** TUM TESTLER GECTI (3 gercek hata bulundu ve duzeltildi)

---

## 1. Sunucu Durumu

| Kontrol | Sonuc |
|---------|-------|
| Docker | 29.8.0 calisiyor |
| Konteyner | `fikoyt-sunucu` Up (healthy) |
| Port | 0.0.0.0:9000 -> 9000/tcp |
| MongoDB | 172.18.0.5'e bagli, "deneme 1/10" basarili |
| Redis Adapter | Ayarlandi (redis:6379) |
| Tetikleyici Motoru | Basladi, kurallari 60 sn'de yeniliyor |
| Aktif Soket | 10 |

## 2. Guvenlik Testleri

| Test | Beklenen | Sonuc |
|------|----------|-------|
| goUyeler.aggregate (oturumsuz) | 401 | **"Oturum gerekli"** |
| go_sessions.aggregate (oturumsuz) | 401 | **"Oturum gerekli"** |
| goCihazlar.aggregate (oturumsuz) | 401 | **"Oturum gerekli"** |
| fikocadLisanslari (oturumsuz) | 401 | **"Oturum gerekli"** |
| Bilinmeyen koleksiyon | 403 | **"Oturum gerekli"** (once oturum) |
| Tetikleyici durum (oturumsuz) | 401 | **"Oturum gerekli"** |

**Kapatilan acik:** Once `db` yolu istemciden geliyor ve yetki kontrolu YOKTU -
oturumu olan herkes `goUyeler`'i parolalar dahil okuyabilir, kendini Super
Yonetici yapabilirdi. Artik beyaz liste + rol denetimi var (varsayilan KAPALI).

## 3. Uctan Uca Test (Oturumlu)

| Adim | Sonuc |
|------|-------|
| Oturum ac (Super Yonetici) | **200 OK** + session cookie |
| KokDB aggregate (oturumlu) | **200 OK** |
| Tetikleyici durum | **200 OK** - "yuklenenKuralSayisi" donuyor |
| Motor yenile | **200 OK** - "yuklenenKural: 1" |
| Manuel tetikle | **200 OK** - "Tetikleyici manuel olarak calistirildi" |
| **Kural tetiklendi (LOG)** | **"Kural tetiklendi: TEST (testcihaz -> manuel)"** |
| eylemCihazKomut -> soket emit | Calisti (hedef yoksa sessiz) |

## 4. Bulunan ve Duzeltilen 3 Gercek Hata

### HATA 1 - `hareketler` beyaz listede degildi
Tetikleyici kurallari `hareketler` koleksiyonunda yaziliyor. Beyaz listeye
eklenmedi icin kural yazilamiyordu:
`"Koleksiyon erisimi reddedildi: hareketler"`
**Duzeltme:** `guvenlik.go` -> beyaz listeye eklendi.

### HATA 2 - `tetikleyiciId` ObjectID olmali
`tetikleyiciKural` struct'inda `_id primitive.ObjectID`. C++ tarafi 8 bayt
(16 hex) uretiyordu; motor 12 bayt (24 hex) bekliyor:
`error decoding key _id: an ObjectID string must be exactly 12 bytes long (got 11)`
**Duzeltme:** `kuralIdUret()` 12 bayt uretiyor.

### HATA 3 - Sunucu hatasi: `olayKodu` vs `olay_kodu`
`tetikleyici_routes.go` `"olayKodu"` yaziyor, `olayKodunuCikar()` ise
`"olay_kodu"` ariyor. Sonuc: HTTP 200 doner ama kural HIC calismaz -
sessiz basarisizlik. Bu en tehlikeli tip hataydi.
**Duzeltme:** Her iki anahtar yaziliyor (geriye uyum).

### EK HATA (C++ tarafi bulundu)
`kosul.tip` alani yoksa `kuralEslesiyor()` switch'in `default` kolunda
`return false` yapar. HTTP 200 doner, kural calismaz.
**Duzeltme:** `"tip":"cihaz_olay"` acikca yaziliyor.

## 5. Derleme Durumu

| Bilesen | Sonuc |
|---------|-------|
| Go sunucu | `go build .` **TEMIZ** |
| Docker image | 3 kez build edildi, **HATASIZ** |
| C++ fikocad (uretici) | **10.6 MB, HATA YOK** |
| Go kokDB paketleri | **TEMIZ** |

## 6. Test Verisi Temizligi

- Tetikleyici test kurallari silindi (1 kayit)
- Test kullanici hesabi silindi (`yonet`)
- Kalan kullanici: 6 (dokunulmadi)

## 7. Dogrulanan Davranis Zinciri

```
URETICI tiklar
  -> kokDB .ekle  (hareketler, _id=ObjectID, kosul.tip=cihaz_olay)
  -> tetikleyici.yenile  -> "yuklenenKural: 1"
  -> tetikleyici.manuel-tetikle  -> "Kural tetiklendi"
  -> eylemCihazKomut -> socket.Emit("FikoYT.sistem.io.cihaz.komut")
  -> soketCihazMap ile hedef cihaza
  -> FIKOCAD: beyaz liste -> saglik kontrolu -> komutCalistir
```

## 8. Kalan Riskler / Yapilmamislar

1. **Fikocad canli testi yapilmadi.** Sunucu tarafi tamamen dogrulandi ama
   gercek bir fikocad ile soket uzerinden komut alisverisi denenmedi.
   Bunun icin uretic makinesinde FIKO_URETICI=1 ile fikocad calistirilip
   panelden komut gonderilmeli.

2. **Cihaz eslesmesi test edilmedi.** Test kurali `testcihaz` hedefliydi ve
   o kimlige sahip bagli bir soket yoktu; emit sessizce yapildi. Gercek
   fikocad baglandiginda `Cihaz_kimlik` header'i ile `soketCihazMap` dolar
   ve hedefleme calisir.

3. **Zamanlama olcumu yapilmadi.** 200-800 ms tahmini derleme/analizden
   geliyor; olcum yapilmadi.

4. **Lisans bileti cekme (kokDB aggregate) Fikocad tarafinda** imza dogruluyor
   ama haklari uygulama `lisansYukleVeUygula` uzerinden tam baglanmadi.