Skip to content
Snippets Groups Projects
TimeoutWrapperTest.cpp 840 B
Newer Older
  • Learn to ignore specific revisions
  • // SPDX-License-Identifier: LGPL-3.0-or-later
    
    // Copyright © 2020-2021 Florian Fischer
    #include <sys/eventfd.h>	// for eventfd, EFD_SEMAPHORE
    
    
    #include <cassert>	// for assert
    #include <cerrno>		// for ECANCELED, ETIME
    #include <cstdint>	// for uint64_t, int32_t
    
    #include "Common.hpp"			// for DIE_MSG_ERRNO
    #include "io/Future.hpp"	// for ReadFuture, TimeoutWrapper
    
    using emper::io::ReadFuture;
    using emper::io::TimeoutWrapper;
    
    void emperTest() {
    	int efd = eventfd(0, EFD_SEMAPHORE);
    	if (efd == -1) {
    		DIE_MSG_ERRNO("eventfd failed");
    	}
    
    	uint64_t read_buf;
    	ReadFuture readFuture(efd, &read_buf, sizeof(read_buf), 0);
    
    
    	TimeoutWrapper::Timespec ts = {.tv_sec = 1, .tv_nsec = 0};
    
    	TimeoutWrapper t(readFuture, ts);
    
    	int32_t res = t.submitAndWait();
    	assert(res == -ETIME);
    
    	res = readFuture.wait();
    	assert(res == -ECANCELED);
    }