Home | History | Annotate | Download | only in minijail
      1 /* Copyright 2018 The Chromium OS Authors. All rights reserved.
      2  * Use of this source code is governed by a BSD-style license that can be
      3  * found in the LICENSE file.
      4  *
      5  * Test util.[ch] module code using gtest.
      6  */
      7 
      8 #include <stdio.h>
      9 #include <stdlib.h>
     10 #include <string.h>
     11 #include <sys/stat.h>
     12 #include <unistd.h>
     13 
     14 #include <gtest/gtest.h>
     15 
     16 #include "util.h"
     17 
     18 // Sanity check for the strip func.
     19 TEST(strip, basic) {
     20   char str[] = " foo\t";
     21   ASSERT_EQ("foo", std::string(strip(str)));
     22 }
     23 
     24 // Make sure we don't crash with various "null"-like inputs.
     25 TEST(tokenize, null_stringp) {
     26   ASSERT_EQ(nullptr, tokenize(nullptr, nullptr));
     27   ASSERT_EQ(nullptr, tokenize(nullptr, ""));
     28   ASSERT_EQ(nullptr, tokenize(nullptr, ","));
     29 
     30   char *p = nullptr;
     31   ASSERT_EQ(nullptr, tokenize(&p, nullptr));
     32 }
     33 
     34 // Make sure we don't crash with various "null"-like inputs.
     35 TEST(tokenize, null_delim) {
     36   char str[] = "a,b,c";
     37   char *p = str;
     38   ASSERT_EQ(str, tokenize(&p, nullptr));
     39   ASSERT_EQ(nullptr, p);
     40   ASSERT_EQ(str, std::string("a,b,c"));
     41 
     42   p = str;
     43   ASSERT_EQ(str, tokenize(&p, ""));
     44   ASSERT_EQ(nullptr, p);
     45   ASSERT_EQ(str, std::string("a,b,c"));
     46 }
     47 
     48 // Sanity check for the tokenize func.
     49 TEST(tokenize, basic) {
     50   char str[] = "a,b,c";
     51   char *p = str;
     52   ASSERT_EQ("a", std::string(tokenize(&p, ",")));
     53   ASSERT_EQ("b", std::string(tokenize(&p, ",")));
     54   ASSERT_EQ("c", std::string(tokenize(&p, ",")));
     55   ASSERT_EQ(nullptr, p);
     56   ASSERT_EQ(nullptr, tokenize(&p, ","));
     57 }
     58 
     59 // Check edge case with an empty string.
     60 TEST(tokenize, empty_string) {
     61   char str[] = "";
     62   char *p = str;
     63   ASSERT_EQ("", std::string(tokenize(&p, ",")));
     64   ASSERT_EQ(nullptr, p);
     65   ASSERT_EQ(nullptr, tokenize(&p, ","));
     66 }
     67 
     68 // Check behavior with empty tokens at the start/middle/end.
     69 TEST(tokenize, empty_tokens) {
     70   char str[] = ",,a,b,,,c,,";
     71   char *p = str;
     72   ASSERT_EQ("", std::string(tokenize(&p, ",")));
     73   ASSERT_EQ("", std::string(tokenize(&p, ",")));
     74   ASSERT_EQ("a", std::string(tokenize(&p, ",")));
     75   ASSERT_EQ("b", std::string(tokenize(&p, ",")));
     76   ASSERT_EQ("", std::string(tokenize(&p, ",")));
     77   ASSERT_EQ("", std::string(tokenize(&p, ",")));
     78   ASSERT_EQ("c", std::string(tokenize(&p, ",")));
     79   ASSERT_EQ("", std::string(tokenize(&p, ",")));
     80   ASSERT_EQ("", std::string(tokenize(&p, ",")));
     81   ASSERT_EQ(nullptr, p);
     82   ASSERT_EQ(nullptr, tokenize(&p, ","));
     83 }
     84