2014-01-07 39 views
1

我試圖測試一個應用程序對一天中的時間有很大的依賴性。我希望能夠執行該程序,就好像它正在正常運行(不加速)但在任意日期/時間段運行一樣。Linux上的時間虛擬化

我的第一個想法是抽象時間檢索函數調用與我自己的庫調用,這將允許我改變測試的行爲,但我想知道是否有可能沒有添加條件邏輯到我的代碼庫或建立一個測試二進制的變體。

我真正在尋找的是某種本地化的時間域,這是可能與容器(如Docker)或使用LD_PRELOAD攔截調用?

我也看到了一個補丁,使用不共享(COL_TIME)啓用時間從系統時間斷開,但它看起來並不像這讓英寸

好像是必須要解決很多問題以前有誰願意分享他們的解決方案?

感謝 AJ

+0

什麼是你對時間的重要依賴?你有應用程序的完整源代碼嗎?它寫的是哪種語言? –

+0

這是C++,我可以訪問整個源代碼。在代碼的許多部分中,當前日期時間正在被檢索並且需要與爲給定的測試運行提供的歷史數據同步,因此這種依賴性很強。 –

回答

3

雖然其他解決方案和技巧都很棒,但我認爲你會嚴重地過度簡化一個簡單的問題。將某些命令行開關包含在程序中用於測試/評估的目的是完全常見和可接受的。我只想有一個命令行開關這樣一個接受ISO時間戳:

./myprogram --debug-override-time=2014-01-01Z12:34:56 

然後在啓動時,如果設置,從當前系統時間減去它,確實使當地apptime()功能,校正的輸出這是常規系統,而是在代碼中隨處調用。

這樣做的最大優點是,可以複製你的測試結果,而在定製的Linux技巧大電文讀出,所以也是一個外部測試團隊或未來的共同開發誰擅長編碼,但在運行時不會把戲。當(單元)測試時,這是一個主要的優勢,能夠用一個簡單的開關調用你的代碼,並且能夠測試結果與樣本集相等。

你甚至不需要記錄它,企業級產品中的許多生產工具都隱藏了命令行開關,這種「普通公衆」不需要知道的行爲。