Sha256: a74a045feccba528d5e48d123258fed86a8f22fcb6a3245d0f7c1a1b41aa12a0

Contents?: true

Size: 1.39 KB

Versions: 93

Compression:

Stored size: 1.39 KB

Contents

#include "TestSupport.h"
#include "FileDescriptor.h"
#include <cerrno>

using namespace Passenger;

namespace tut {
	struct FileDescriptorTest {
		int pipes[2];
		
		FileDescriptorTest() {
			pipe(pipes);
		}
		
		~FileDescriptorTest() {
			if (pipes[0] != -1) {
				close(pipes[0]);
			}
			if (pipes[1] != -1) {
				close(pipes[1]);
			}
		}
	};
	
	DEFINE_TEST_GROUP(FileDescriptorTest);
	
	TEST_METHOD(1) {
		// Test constructors.
		FileDescriptor f;
		ensure_equals("An empty FileDescriptor has value -1",
			f, -1);
		
		int fd = pipes[0];
		pipes[0] = -1;
		f = FileDescriptor(fd);
		ensure_equals("FileDescriptor takes the value of its constructor argument",
			f, fd);
	}
	
	TEST_METHOD(2) {
		// It closes the underlying file descriptor when the last
		// instance is destroyed.
		int reader = pipes[0];
		pipes[0] = -1;
		{
			FileDescriptor f(reader);
			{
				FileDescriptor f2(f);
			}
			ensure("File descriptor is not closed if there are still live copies",
				write(pipes[1], "x", 1) != -1);
		}
		ensure("File descriptor is closed if the last live copy is dead",
			write(pipes[1], "x", 1) == -1);
	}
	
	TEST_METHOD(3) {
		// Calling close() will close the underlying file descriptor for all instances.
		int reader = pipes[0];
		pipes[0] = -1;
		
		FileDescriptor f(reader);
		FileDescriptor f2(f);
		f.close();
		ensure_equals(f, -1);
		ensure_equals(f2, -1);
		ensure(write(pipes[1], "x", 1) == -1);
	}
}

Version data entries

93 entries across 93 versions & 4 rubygems

Version Path
passenger-4.0.60 test/cxx/FileDescriptorTest.cpp
passenger-5.0.4 test/cxx/FileDescriptorTest.cpp
passenger-5.0.3 test/cxx/FileDescriptorTest.cpp
passenger-5.0.2 test/cxx/FileDescriptorTest.cpp
passenger-5.0.1 test/cxx/FileDescriptorTest.cpp
passenger-5.0.0.rc2 test/cxx/FileDescriptorTest.cpp
passenger-5.0.0.rc1 test/cxx/FileDescriptorTest.cpp
passenger-4.0.59 test/cxx/FileDescriptorTest.cpp
passenger-5.0.0.beta3 test/cxx/FileDescriptorTest.cpp
passenger-4.0.58 test/cxx/FileDescriptorTest.cpp
passenger-4.0.57 test/cxx/FileDescriptorTest.cpp
passenger-5.0.0.beta2 test/cxx/FileDescriptorTest.cpp
passenger-4.0.56 test/cxx/FileDescriptorTest.cpp
passenger-4.0.55 test/cxx/FileDescriptorTest.cpp
passenger-5.0.0.beta1 test/cxx/FileDescriptorTest.cpp
passenger-4.0.53 test/cxx/FileDescriptorTest.cpp
passenger-4.0.52 test/cxx/FileDescriptorTest.cpp
passenger-4.0.51 test/cxx/FileDescriptorTest.cpp
passenger-4.0.50 test/cxx/FileDescriptorTest.cpp
passenger-4.0.49 test/cxx/FileDescriptorTest.cpp