// Copyright 2020 The Fuchsia Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.

#include <dirent.h>
#include <lib/fdio/directory.h>

#include <string>
#include <vector>

#include <fbl/string_printf.h>
#include <zxtest/zxtest.h>

std::vector<std::string> list_dir_contents(const char* name) {
  std::vector<std::string> res;

  DIR* dir;
  struct dirent* ent;
  if ((dir = opendir(name)) != NULL) {
    /* print all the files and directories within directory */
    while ((ent = readdir(dir)) != NULL) {
      res.push_back(std::string(ent->d_name));
    }
    closedir(dir);
  }

  return res;
}

TEST(NamespaceTest, Test) {
  // For each directory in the root directory, let's make sure that it actually
  // goes somewhere. We're testing that the handle has something responding at
  // the other side, not that it goes somewhere valid, so it's fine if we get an
  // error while using it.
  auto top_level_dir_names = list_dir_contents("/");
  for (const auto& name : top_level_dir_names) {
    fbl::String sub_dir_name = fbl::StringPrintf("/%s", name.c_str());
    auto dir_contents = list_dir_contents(sub_dir_name.c_str());
  }
}
