libfaketime untuk Windows
Jawaban singkat: libfaketime tidak berjalan di Windows, dan tidak bisa - ia dibangun
di atas LD_PRELOAD, yang tidak dimiliki Windows. Chrono Mock adalah gagasan yang sama,
dibangun dengan cara yang diizinkan Windows.
Mengapa ia tidak bisa begitu saja dipindahkan
libfaketime bekerja dengan membuat dynamic
loader menempatkan pustaka kecil di depan pustaka C, sehingga panggilan program ke
time() sampai lebih dulu ke penggantinya. Kait itu adalah LD_PRELOAD di
Linux dan DYLD_INSERT_LIBRARIES di macOS. README-nya sendiri mencantumkan persis dua
platform itu.
Windows tidak punya padanannya, dan jamnya toh tidak berada di balik satu fungsi. Aplikasi membaca waktu lewat API Win32, lewat API native di bawahnya, dan lewat apa pun yang dibungkus runtime mereka di sekeliling keduanya - sehingga versi Windows dari gagasan ini adalah pustaka yang disuntikkan ke proses target, mengalihkan sekumpulan fungsi yang diekspor, bukan satu simbol.
Flag-nya, dipetakan satu per satu
| libfaketime | Chrono Mock |
|---|---|
FAKETIME="2020-12-24 20:30:00" |
--at 2020-12-24T20:30:00 |
FAKETIME="+14d" |
--at +14d |
FAKETIME="-10m" |
--at -10m |
FAKETIME="+0 x2" |
--mode x2 |
FAKETIME_DONT_FAKE_MONOTONIC=1 |
bawaan di sini - lihat di bawah |
LD_PRELOAD=libfaketime.so.1 |
tidak ada yang perlu disetel - alat ini menyuntik |
Jadi kedua sisi dari pengujian yang sama tampak seperti ini:
# Linux FAKETIME="2020-12-24 20:30:00" LD_PRELOAD=/usr/local/lib/libfaketime.so.1 ./test # Windows chrono run "C:\apps\test.exe" --at 2020-12-24T20:30:00
Di mana keduanya benar-benar berbeda
Jam monotonik terbalik. libfaketime memalsukannya secara bawaan dan memberi Anda
FAKETIME_DONT_FAKE_MONOTONIC untuk menghentikannya. Di sini penghitung beresolusi
tinggi tetap nyata secara bawaan, karena menskalakannya mengacaukan stabilitas rendering dalam
pengujian, dan --scale-qpc mengaktifkannya. Switch itulah yang membuat
monotonic Python 3.13+, Stopwatch .NET, dan nanoTime Java
mengikuti jam sesi.
Windows punya lebih banyak tempat untuk dicegat. Di luar jam dinding ada zona waktu, sumbu waktu berlalu, empat keluarga timer, fungsi sleep dan wait, serta pembuatan proses - total 44 kanal. Dari jumlah itu, 30 digeser, dan 14 sisanya, termasuk koneksi jaringan, dihitung.
Alat ini melaporkan cakupannya sendiri. Setiap sesi berakhir dengan putusan, kanal yang benar-benar dibaca aplikasi beserta hitungan untuk masing-masing, dan kanal yang terlewat. Itulah bagian yang tidak memiliki padanan di kedua platform.
libfaketime lebih tua dan lebih luas di wilayahnya sendiri. Ia punya bertahun-tahun pemakaian, mencakup beragam titik masuk pustaka C, dan di Linux ia adalah alat yang tepat. Tidak ada di sini yang menggantikannya di sana.
Jika Anda sebenarnya menginginkan libfaketime itu sendiri
Dua jalur yang jujur, keduanya memindahkan program yang diuji ke Linux:
- WSL - bangun dan jalankan libfaketime di dalam subsistem Linux. Cocok bila yang diuji adalah program Linux yang kebetulan Anda kembangkan di Windows.
- Container - gagasan yang sama, lebih dapat direproduksi.
Tidak satu pun membantu untuk aplikasi Windows, yang merupakan kasus tempat alat ini ada.