Home | History | Annotate | Download | only in init
      1 /*
      2  * Copyright (C) 2017 The Android Open Source Project
      3  *
      4  * Licensed under the Apache License, Version 2.0 (the "License");
      5  * you may not use this file except in compliance with the License.
      6  * You may obtain a copy of the License at
      7  *
      8  *      http://www.apache.org/licenses/LICENSE-2.0
      9  *
     10  * Unless required by applicable law or agreed to in writing, software
     11  * distributed under the License is distributed on an "AS IS" BASIS,
     12  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
     13  * See the License for the specific language governing permissions and
     14  * limitations under the License.
     15  */
     16 
     17 #include "service.h"
     18 
     19 #include <algorithm>
     20 #include <memory>
     21 #include <type_traits>
     22 #include <vector>
     23 
     24 #include <gtest/gtest.h>
     25 
     26 TEST(service, pod_initialized) {
     27     constexpr auto memory_size = sizeof(Service);
     28     alignas(alignof(Service)) char old_memory[memory_size];
     29 
     30     for (std::size_t i = 0; i < memory_size; ++i) {
     31         old_memory[i] = 0xFF;
     32     }
     33 
     34     std::vector<std::string> dummy_args{"/bin/test"};
     35     Service* service_in_old_memory = new (old_memory) Service("test_old_memory", dummy_args);
     36 
     37     EXPECT_EQ(0U, service_in_old_memory->flags());
     38     EXPECT_EQ(0, service_in_old_memory->pid());
     39     EXPECT_EQ(0, service_in_old_memory->crash_count());
     40     EXPECT_EQ(0U, service_in_old_memory->uid());
     41     EXPECT_EQ(0U, service_in_old_memory->gid());
     42     EXPECT_EQ(0U, service_in_old_memory->namespace_flags());
     43     EXPECT_EQ(0, service_in_old_memory->keychord_id());
     44     EXPECT_EQ(IoSchedClass_NONE, service_in_old_memory->ioprio_class());
     45     EXPECT_EQ(0, service_in_old_memory->ioprio_pri());
     46     EXPECT_EQ(0, service_in_old_memory->priority());
     47     EXPECT_EQ(-1000, service_in_old_memory->oom_score_adjust());
     48 
     49     for (std::size_t i = 0; i < memory_size; ++i) {
     50         old_memory[i] = 0xFF;
     51     }
     52 
     53     Service* service_in_old_memory2 = new (old_memory)
     54         Service("test_old_memory", 0U, 0U, 0U, std::vector<gid_t>(), CapSet(), 0U, "", dummy_args);
     55 
     56     EXPECT_EQ(0U, service_in_old_memory2->flags());
     57     EXPECT_EQ(0, service_in_old_memory2->pid());
     58     EXPECT_EQ(0, service_in_old_memory2->crash_count());
     59     EXPECT_EQ(0U, service_in_old_memory2->uid());
     60     EXPECT_EQ(0U, service_in_old_memory2->gid());
     61     EXPECT_EQ(0U, service_in_old_memory2->namespace_flags());
     62     EXPECT_EQ(0, service_in_old_memory2->keychord_id());
     63     EXPECT_EQ(IoSchedClass_NONE, service_in_old_memory2->ioprio_class());
     64     EXPECT_EQ(0, service_in_old_memory2->ioprio_pri());
     65     EXPECT_EQ(0, service_in_old_memory2->priority());
     66     EXPECT_EQ(-1000, service_in_old_memory2->oom_score_adjust());
     67 }
     68