Chrono Mock
Ngôn ngữTiếng Việt

Đổi ngày hệ thống để kiểm thử một ứng dụng

Đây là mẹo cũ nhất còn tồn tại: đặt đồng hồ Windows về ngày bạn muốn kiểm thử, chạy chương trình rồi đặt lại. Cách này hiệu quả - và chừng nào đồng hồ còn bị dời, nó dời luôn mọi thứ khác trên máy.

Điều gì thực sự dịch chuyển theo đồng hồ

Đồng hồ hệ thống không phải của riêng chương trình bạn đang kiểm thử. Mọi tiến trình, dịch vụ và cuộc trao đổi mạng trên máy đều đọc cùng một chiếc, nên một thay đổi làm cho một bài kiểm thử là thay đổi cho tất cả.

Cái đọc đồng hồĐiều xảy ra khi bạn dời nó
Đăng nhập miền và thư mục chia sẻMặc định Kerberos chấp nhận độ lệch đồng hồ năm phút. Vượt quá mức đó, vé của nó bị từ chối, việc đăng nhập hoặc truy cập thư mục chia sẻ thất bại.
Chứng chỉ và HTTPSChứng chỉ có hợp lệ hay không do đồng hồ quyết định. Đặt đồng hồ qua ngày kết thúc của chứng chỉ và mọi kết nối dựa vào nó đều bị từ chối vì hết hạn; lùi đủ xa thì chứng chỉ chưa có hiệu lực.
Dịch vụ Windows TimeMột máy đã gia nhập miền lấy giờ từ bộ điều khiển miền, và mặc định dịch vụ sửa đồng hồ bất kể độ lệch lớn đến đâu. Ngày bạn đặt có thể bị hoàn lại khi bạn vẫn đang kiểm thử.
Mọi thứ ghi lại thời gianTệp, nhật ký, dòng cơ sở dữ liệu và thư đã gửi được tạo ra khi đồng hồ bị dời đều mang ngày của bài kiểm thử, và giữ nguyên sau khi bạn đặt lại đồng hồ.
Phần mềm ghi nhớ ngày muộn nhất từng thấyMột số chương trình xem đồng hồ chạy lùi là hành vi can thiệp - và đó chính xác là điều xảy ra khi bạn khôi phục ngày thật.

Ngày càng xa, bạn càng gặp nhiều điều này. Một máy đặt ở năm 2038 thấy mọi chứng chỉ cấp hôm nay đều đã hết hạn. Kiểm thử năm 2038 mà không cần thế →

Việc này còn cần một quyền mà phần lớn tài khoản không có: đổi giờ hệ thống là đặc quyền của quản trị viên, và trên máy được quản lý thì thường không phải của bạn.

Khi nào đổi đồng hồ là câu trả lời đúng

Một máy ảo không ai khác dùng, với tính năng đồng bộ đồng hồ riêng đã tắt, là một bàn thử hoàn toàn tốt. Bạn bỏ nó sau đó, nên mọi thứ nó ghi lại đều không quan trọng. Nếu bạn có sẵn một máy và bài kiểm thử chỉ về một ngày, đó là cách đơn giản nhất mà vẫn chạy được.

Rắc rối bắt đầu khi đó là chiếc máy bạn đang làm việc, chiếc máy trong miền, hoặc chiếc máy đồng thời chạy thứ gì đó không được phép nhận ra điều gì.

Thay vào đó, hãy dời đồng hồ của một chương trình

Giờ bị dời chỉ hiển thị với một tiến trình và các tiến trình con nó khởi chạy. Đăng nhập miền, chứng chỉ của bạn và Windows Update không bao giờ thấy nó, nên không thứ gì trong bảng ở trên dịch chuyển - và sau đó không có gì cần đặt lại.

# Ứng dụng thấy ngày 31 tháng 12 năm 2027, 23:59:50. Mọi thứ khác giữ ngày thật.
chrono run "C:\apps\test.exe" --at 2027-12-31T23:59:50

# Bắt đầu mười phút trước nửa đêm và chạy với tốc độ x60 - giao thừa đến sau mười giây
chrono run "C:\apps\test.exe" --at 2027-12-31T23:50:00 --mode x60

Ngày được dời cho một chương trình có thực sự đến được nó hay không không phải là điều để giả định. Mỗi phiên kết thúc bằng một kết luận và danh sách các kênh thời gian mà chương trình thực sự đã đọc. Làm sao bạn biết nó đã hiệu quả →

Điều này không thay thế được gì

  • Một chương trình hỏi máy chủ về giờ nằm ngoài tầm với của việc thay thế cục bộ. Phiên sẽ báo khi thấy chương trình mở kết nối mạng, thay vì để bạn tự cho rằng bài kiểm thử đã đạt.
  • Kiểm thử chính hệ thống - một dịch vụ phản ứng với việc đồng hồ thật thay đổi, một tác vụ theo lịch, cách Windows cư xử quanh một lần đổi giờ - không có gì thay thế được việc đổi đồng hồ, trên một máy bạn có thể chấp nhận hy sinh.

Dùng thử