10ada2ca1dc2b275318cb134cc9a02b42687ed19fBertrand SIMONNET/*
20ada2ca1dc2b275318cb134cc9a02b42687ed19fBertrand SIMONNET * Copyright (C) 2015 The Android Open Source Project
30ada2ca1dc2b275318cb134cc9a02b42687ed19fBertrand SIMONNET *
40ada2ca1dc2b275318cb134cc9a02b42687ed19fBertrand SIMONNET * Licensed under the Apache License, Version 2.0 (the "License");
50ada2ca1dc2b275318cb134cc9a02b42687ed19fBertrand SIMONNET * you may not use this file except in compliance with the License.
60ada2ca1dc2b275318cb134cc9a02b42687ed19fBertrand SIMONNET * You may obtain a copy of the License at
70ada2ca1dc2b275318cb134cc9a02b42687ed19fBertrand SIMONNET *
80ada2ca1dc2b275318cb134cc9a02b42687ed19fBertrand SIMONNET *      http://www.apache.org/licenses/LICENSE-2.0
90ada2ca1dc2b275318cb134cc9a02b42687ed19fBertrand SIMONNET *
100ada2ca1dc2b275318cb134cc9a02b42687ed19fBertrand SIMONNET * Unless required by applicable law or agreed to in writing, software
110ada2ca1dc2b275318cb134cc9a02b42687ed19fBertrand SIMONNET * distributed under the License is distributed on an "AS IS" BASIS,
120ada2ca1dc2b275318cb134cc9a02b42687ed19fBertrand SIMONNET * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
130ada2ca1dc2b275318cb134cc9a02b42687ed19fBertrand SIMONNET * See the License for the specific language governing permissions and
140ada2ca1dc2b275318cb134cc9a02b42687ed19fBertrand SIMONNET * limitations under the License.
150ada2ca1dc2b275318cb134cc9a02b42687ed19fBertrand SIMONNET */
160ada2ca1dc2b275318cb134cc9a02b42687ed19fBertrand SIMONNET
170ada2ca1dc2b275318cb134cc9a02b42687ed19fBertrand SIMONNET#include <gtest/gtest.h>
180ada2ca1dc2b275318cb134cc9a02b42687ed19fBertrand SIMONNET
190ada2ca1dc2b275318cb134cc9a02b42687ed19fBertrand SIMONNET#include "collectors/cpu_usage_collector.h"
200ada2ca1dc2b275318cb134cc9a02b42687ed19fBertrand SIMONNET#include "metrics/metrics_library_mock.h"
210ada2ca1dc2b275318cb134cc9a02b42687ed19fBertrand SIMONNET
220ada2ca1dc2b275318cb134cc9a02b42687ed19fBertrand SIMONNET
230ada2ca1dc2b275318cb134cc9a02b42687ed19fBertrand SIMONNETTEST(CpuUsageTest, ParseProcStat) {
240ada2ca1dc2b275318cb134cc9a02b42687ed19fBertrand SIMONNET  MetricsLibraryMock metrics_lib_mock;
250ada2ca1dc2b275318cb134cc9a02b42687ed19fBertrand SIMONNET  CpuUsageCollector collector(&metrics_lib_mock);
260ada2ca1dc2b275318cb134cc9a02b42687ed19fBertrand SIMONNET  std::vector<std::string> invalid_contents = {
270ada2ca1dc2b275318cb134cc9a02b42687ed19fBertrand SIMONNET    "",
280ada2ca1dc2b275318cb134cc9a02b42687ed19fBertrand SIMONNET    // First line does not start with cpu.
290ada2ca1dc2b275318cb134cc9a02b42687ed19fBertrand SIMONNET    "spu  17191 11 36579 151118 289 0 2 0 0 0\n"
300ada2ca1dc2b275318cb134cc9a02b42687ed19fBertrand SIMONNET    "cpu0 1564 2 866 48650 68 0 2 0 0 0\n"
310ada2ca1dc2b275318cb134cc9a02b42687ed19fBertrand SIMONNET    "cpu1 14299 0 35116 1844 81 0 0 0 0 0\n",
320ada2ca1dc2b275318cb134cc9a02b42687ed19fBertrand SIMONNET    // One of the field is not a number.
330ada2ca1dc2b275318cb134cc9a02b42687ed19fBertrand SIMONNET    "cpu  a17191 11 36579 151118 289 0 2 0 0 0",
340ada2ca1dc2b275318cb134cc9a02b42687ed19fBertrand SIMONNET    // To many numbers in the first line.
350ada2ca1dc2b275318cb134cc9a02b42687ed19fBertrand SIMONNET    "cpu  17191 11 36579 151118 289 0 2 0 0 0 102"
360ada2ca1dc2b275318cb134cc9a02b42687ed19fBertrand SIMONNET  };
370ada2ca1dc2b275318cb134cc9a02b42687ed19fBertrand SIMONNET
380ada2ca1dc2b275318cb134cc9a02b42687ed19fBertrand SIMONNET  uint64_t user, nice, system;
390ada2ca1dc2b275318cb134cc9a02b42687ed19fBertrand SIMONNET  for (int i = 0; i < invalid_contents.size(); i++) {
400ada2ca1dc2b275318cb134cc9a02b42687ed19fBertrand SIMONNET    ASSERT_FALSE(collector.ParseProcStat(invalid_contents[i], &user, &nice,
410ada2ca1dc2b275318cb134cc9a02b42687ed19fBertrand SIMONNET                                         &system));
420ada2ca1dc2b275318cb134cc9a02b42687ed19fBertrand SIMONNET  }
430ada2ca1dc2b275318cb134cc9a02b42687ed19fBertrand SIMONNET
440ada2ca1dc2b275318cb134cc9a02b42687ed19fBertrand SIMONNET  ASSERT_TRUE(collector.ParseProcStat(
450ada2ca1dc2b275318cb134cc9a02b42687ed19fBertrand SIMONNET      std::string("cpu  17191 11 36579 151118 289 0 2 0 0 0"),
460ada2ca1dc2b275318cb134cc9a02b42687ed19fBertrand SIMONNET      &user, &nice, &system));
470ada2ca1dc2b275318cb134cc9a02b42687ed19fBertrand SIMONNET  ASSERT_EQ(17191, user);
480ada2ca1dc2b275318cb134cc9a02b42687ed19fBertrand SIMONNET  ASSERT_EQ(11, nice);
490ada2ca1dc2b275318cb134cc9a02b42687ed19fBertrand SIMONNET  ASSERT_EQ(36579, system);
500ada2ca1dc2b275318cb134cc9a02b42687ed19fBertrand SIMONNET}
51