//
//  mockaksWatchDog.m
//  Security
//

#import <XCTest/XCTest.h>
#import <OCMock/OCMock.h>

#import "mockaksxcbase.h"
#import "SecdWatchdog.h"

@interface mockaksWatchDog : mockaksxcbase
@property (assign) uint64_t diskusage;
@end

@implementation mockaksWatchDog

- (bool)mockedWatchdogrusage:(rusage_info_current *)rusage
{
    memset(rusage, 0, sizeof(*rusage));
    rusage->ri_diskio_byteswritten = self.diskusage;
    rusage->ri_logical_writes = self.diskusage;
    return true;
}


- (void)testWatchDogDiskWrite {

    id mock = OCMClassMock([SecdWatchdog class]);
    OCMStub([mock watchdogrusage:[OCMArg anyPointer]]).andCall(self, @selector(mockedWatchdogrusage:));
    OCMStub([mock triggerOSFaults]).andReturn(FALSE);

    SecdWatchdog *wd = [SecdWatchdog watchdog];

    self.diskusage = 0;
    XCTAssertFalse(wd.diskUsageHigh, "diskusage high should not be true");

    self.diskusage = 2 * 1000 * 1024 * 1024; // 2GiBi
    [wd runWatchdog];

    XCTAssertTrue(wd.diskUsageHigh, "diskusage high should be true");
}

@end
