Sha256: 2e65d1dae4815ae1ab2bdda6af6e0608b074dacf1ab8cc708c136bdb7a6fb1b2

Contents?: true

Size: 1.63 KB

Versions: 5

Compression:

Stored size: 1.63 KB

Contents

#include "tut.h"
#include "FileChecker.h"
#include "SystemTime.h"
#include <stdio.h>
#include <utime.h>

using namespace Passenger;
using namespace std;

namespace tut {
	struct FileCheckerTest {
		FileCheckerTest() {
		}
		
		~FileCheckerTest() {
			unlink("test.txt");
			SystemTime::release();
		}
	};
	
	static void touch(const char *filename, time_t timestamp = 0) {
		FILE *f = fopen(filename, "w");
		fclose(f);
		if (timestamp != 0) {
			struct utimbuf buf;
			buf.actime = timestamp;
			buf.modtime = timestamp;
			utime(filename, &buf);
		}
	}
	
	DEFINE_TEST_GROUP(FileCheckerTest);
	
	TEST_METHOD(1) {
		// File is not changed if it didn't exist.
		FileChecker checker("test.txt");
		ensure(!checker.changed());
	}
	
	TEST_METHOD(2) {
		// File is not changed if its ctime and mtime didn't change.
		touch("test.txt");
		FileChecker checker("test.txt");
		ensure(!checker.changed());
	}
	
	TEST_METHOD(3) {
		// File is changed if it didn't exist but has now been created.
		FileChecker checker("test.txt");
		touch("test.txt");
		ensure(checker.changed());
	}
	
	TEST_METHOD(4) {
		// File is changed if its mtime changed.
		touch("test.txt", time(NULL) - 5);
		FileChecker checker("test.txt");
		touch("test.txt");
		ensure("First check: changed", checker.changed());
		ensure("Second check: unchanged", !checker.changed());
	}
	
	TEST_METHOD(5) {
		// Throttling works.
		SystemTime::force(5);
		
		FileChecker checker("test.txt");
		checker.changed(3);
		touch("test.txt");
		ensure(!checker.changed(3));
		
		SystemTime::force(6);
		ensure(!checker.changed(3));
		
		SystemTime::force(8);
		ensure(checker.changed(3));
		ensure(!checker.changed(3));
	}
}

Version data entries

5 entries across 5 versions & 1 rubygems

Version Path
passenger-2.1.2 test/FileCheckerTest.cpp
passenger-2.1.3 test/FileCheckerTest.cpp
passenger-2.2.0 test/FileCheckerTest.cpp
passenger-2.2.1 test/FileCheckerTest.cpp
passenger-2.2.2 test/FileCheckerTest.cpp