* commit '4b0e0fa75337449635845d5adf1f337d69608ba0': Add test_forked() option
This commit is contained in:
		
							
								
								
									
										33
									
								
								tests/gtest_ex.h
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										33
									
								
								tests/gtest_ex.h
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,33 @@
 | 
				
			|||||||
 | 
					/*
 | 
				
			||||||
 | 
					 * Copyright (C) 2014 The Android Open Source Project
 | 
				
			||||||
 | 
					 *
 | 
				
			||||||
 | 
					 * Licensed under the Apache License, Version 2.0 (the "License");
 | 
				
			||||||
 | 
					 * you may not use this file except in compliance with the License.
 | 
				
			||||||
 | 
					 * You may obtain a copy of the License at
 | 
				
			||||||
 | 
					 *
 | 
				
			||||||
 | 
					 *      http://www.apache.org/licenses/LICENSE-2.0
 | 
				
			||||||
 | 
					 *
 | 
				
			||||||
 | 
					 * Unless required by applicable law or agreed to in writing, software
 | 
				
			||||||
 | 
					 * distributed under the License is distributed on an "AS IS" BASIS,
 | 
				
			||||||
 | 
					 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 | 
				
			||||||
 | 
					 * See the License for the specific language governing permissions and
 | 
				
			||||||
 | 
					 * limitations under the License.
 | 
				
			||||||
 | 
					 */
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					#include <gtest/gtest.h>
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					template<typename F>
 | 
				
			||||||
 | 
					void test_forked(F test) {
 | 
				
			||||||
 | 
					  int pid = fork();
 | 
				
			||||||
 | 
					  ASSERT_NE(-1, pid) << strerror(errno);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  if (pid == 0) {
 | 
				
			||||||
 | 
					    test();
 | 
				
			||||||
 | 
					    _exit(testing::Test::HasFailure() ? 1 : 0);
 | 
				
			||||||
 | 
					  }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  int status;
 | 
				
			||||||
 | 
					  ASSERT_EQ(pid, waitpid(pid, &status, 0));
 | 
				
			||||||
 | 
					  ASSERT_TRUE(WIFEXITED(status));
 | 
				
			||||||
 | 
					  ASSERT_EQ(0, WEXITSTATUS(status)) << "Forked test has failed, see above..";
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
@@ -19,6 +19,7 @@
 | 
				
			|||||||
#include "private/ScopeGuard.h"
 | 
					#include "private/ScopeGuard.h"
 | 
				
			||||||
#include "BionicDeathTest.h"
 | 
					#include "BionicDeathTest.h"
 | 
				
			||||||
#include "ScopedSignalHandler.h"
 | 
					#include "ScopedSignalHandler.h"
 | 
				
			||||||
 | 
					#include "gtest_ex.h"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
#include <errno.h>
 | 
					#include <errno.h>
 | 
				
			||||||
#include <inttypes.h>
 | 
					#include <inttypes.h>
 | 
				
			||||||
@@ -721,7 +722,8 @@ static int g_atfork_child_calls = 0;
 | 
				
			|||||||
static void AtForkChild1() { g_atfork_child_calls = (g_atfork_child_calls << 4) | 1; }
 | 
					static void AtForkChild1() { g_atfork_child_calls = (g_atfork_child_calls << 4) | 1; }
 | 
				
			||||||
static void AtForkChild2() { g_atfork_child_calls = (g_atfork_child_calls << 4) | 2; }
 | 
					static void AtForkChild2() { g_atfork_child_calls = (g_atfork_child_calls << 4) | 2; }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
TEST(pthread, pthread_atfork) {
 | 
					TEST(pthread, pthread_atfork_smoke) {
 | 
				
			||||||
 | 
					  test_forked([]() {
 | 
				
			||||||
    ASSERT_EQ(0, pthread_atfork(AtForkPrepare1, AtForkParent1, AtForkChild1));
 | 
					    ASSERT_EQ(0, pthread_atfork(AtForkPrepare1, AtForkParent1, AtForkChild1));
 | 
				
			||||||
    ASSERT_EQ(0, pthread_atfork(AtForkPrepare2, AtForkParent2, AtForkChild2));
 | 
					    ASSERT_EQ(0, pthread_atfork(AtForkPrepare2, AtForkParent2, AtForkChild2));
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@@ -737,6 +739,7 @@ TEST(pthread, pthread_atfork) {
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
    // Prepare calls are made in the reverse order.
 | 
					    // Prepare calls are made in the reverse order.
 | 
				
			||||||
    ASSERT_EQ(0x21, g_atfork_prepare_calls);
 | 
					    ASSERT_EQ(0x21, g_atfork_prepare_calls);
 | 
				
			||||||
 | 
					  });
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
TEST(pthread, pthread_attr_getscope) {
 | 
					TEST(pthread, pthread_attr_getscope) {
 | 
				
			||||||
 
 | 
				
			|||||||
		Reference in New Issue
	
	Block a user