11d18e9cc0ab8b2f6d860c4f7d85c33eb5cde4179Elliott Hughes/*
21d18e9cc0ab8b2f6d860c4f7d85c33eb5cde4179Elliott Hughes * Copyright (C) 2014 The Android Open Source Project
31d18e9cc0ab8b2f6d860c4f7d85c33eb5cde4179Elliott Hughes *
41d18e9cc0ab8b2f6d860c4f7d85c33eb5cde4179Elliott Hughes * Licensed under the Apache License, Version 2.0 (the "License");
51d18e9cc0ab8b2f6d860c4f7d85c33eb5cde4179Elliott Hughes * you may not use this file except in compliance with the License.
61d18e9cc0ab8b2f6d860c4f7d85c33eb5cde4179Elliott Hughes * You may obtain a copy of the License at
71d18e9cc0ab8b2f6d860c4f7d85c33eb5cde4179Elliott Hughes *
81d18e9cc0ab8b2f6d860c4f7d85c33eb5cde4179Elliott Hughes *      http://www.apache.org/licenses/LICENSE-2.0
91d18e9cc0ab8b2f6d860c4f7d85c33eb5cde4179Elliott Hughes *
101d18e9cc0ab8b2f6d860c4f7d85c33eb5cde4179Elliott Hughes * Unless required by applicable law or agreed to in writing, software
111d18e9cc0ab8b2f6d860c4f7d85c33eb5cde4179Elliott Hughes * distributed under the License is distributed on an "AS IS" BASIS,
121d18e9cc0ab8b2f6d860c4f7d85c33eb5cde4179Elliott Hughes * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
131d18e9cc0ab8b2f6d860c4f7d85c33eb5cde4179Elliott Hughes * See the License for the specific language governing permissions and
141d18e9cc0ab8b2f6d860c4f7d85c33eb5cde4179Elliott Hughes * limitations under the License.
151d18e9cc0ab8b2f6d860c4f7d85c33eb5cde4179Elliott Hughes */
161d18e9cc0ab8b2f6d860c4f7d85c33eb5cde4179Elliott Hughes
171d18e9cc0ab8b2f6d860c4f7d85c33eb5cde4179Elliott Hughes#include <gtest/gtest.h>
181d18e9cc0ab8b2f6d860c4f7d85c33eb5cde4179Elliott Hughes
191d18e9cc0ab8b2f6d860c4f7d85c33eb5cde4179Elliott Hughes#include <sys/vfs.h>
201d18e9cc0ab8b2f6d860c4f7d85c33eb5cde4179Elliott Hughes
211d18e9cc0ab8b2f6d860c4f7d85c33eb5cde4179Elliott Hughes#include <sys/types.h>
221d18e9cc0ab8b2f6d860c4f7d85c33eb5cde4179Elliott Hughes#include <sys/stat.h>
231d18e9cc0ab8b2f6d860c4f7d85c33eb5cde4179Elliott Hughes#include <fcntl.h>
241d18e9cc0ab8b2f6d860c4f7d85c33eb5cde4179Elliott Hughes
251d18e9cc0ab8b2f6d860c4f7d85c33eb5cde4179Elliott Hughes#include <string>
261d18e9cc0ab8b2f6d860c4f7d85c33eb5cde4179Elliott Hughes
271d18e9cc0ab8b2f6d860c4f7d85c33eb5cde4179Elliott Hughestemplate <typename StatFsT> void Check(StatFsT& sb) {
281d18e9cc0ab8b2f6d860c4f7d85c33eb5cde4179Elliott Hughes  EXPECT_EQ(4096, static_cast<int>(sb.f_bsize));
291d18e9cc0ab8b2f6d860c4f7d85c33eb5cde4179Elliott Hughes  EXPECT_EQ(0U, sb.f_bfree);
301d18e9cc0ab8b2f6d860c4f7d85c33eb5cde4179Elliott Hughes  EXPECT_EQ(0U, sb.f_ffree);
311d18e9cc0ab8b2f6d860c4f7d85c33eb5cde4179Elliott Hughes  EXPECT_EQ(0, sb.f_fsid.__val[0]);
321d18e9cc0ab8b2f6d860c4f7d85c33eb5cde4179Elliott Hughes  EXPECT_EQ(0, sb.f_fsid.__val[1]);
331d18e9cc0ab8b2f6d860c4f7d85c33eb5cde4179Elliott Hughes  EXPECT_EQ(255, static_cast<int>(sb.f_namelen));
341d18e9cc0ab8b2f6d860c4f7d85c33eb5cde4179Elliott Hughes}
351d18e9cc0ab8b2f6d860c4f7d85c33eb5cde4179Elliott Hughes
361d18e9cc0ab8b2f6d860c4f7d85c33eb5cde4179Elliott HughesTEST(sys_vfs, statfs) {
371d18e9cc0ab8b2f6d860c4f7d85c33eb5cde4179Elliott Hughes  struct statfs sb;
381d18e9cc0ab8b2f6d860c4f7d85c33eb5cde4179Elliott Hughes  ASSERT_EQ(0, statfs("/proc", &sb));
391d18e9cc0ab8b2f6d860c4f7d85c33eb5cde4179Elliott Hughes  Check(sb);
401d18e9cc0ab8b2f6d860c4f7d85c33eb5cde4179Elliott Hughes}
411d18e9cc0ab8b2f6d860c4f7d85c33eb5cde4179Elliott Hughes
421d18e9cc0ab8b2f6d860c4f7d85c33eb5cde4179Elliott HughesTEST(sys_vfs, statfs64) {
431d18e9cc0ab8b2f6d860c4f7d85c33eb5cde4179Elliott Hughes  struct statfs64 sb;
441d18e9cc0ab8b2f6d860c4f7d85c33eb5cde4179Elliott Hughes  ASSERT_EQ(0, statfs64("/proc", &sb));
451d18e9cc0ab8b2f6d860c4f7d85c33eb5cde4179Elliott Hughes  Check(sb);
461d18e9cc0ab8b2f6d860c4f7d85c33eb5cde4179Elliott Hughes}
471d18e9cc0ab8b2f6d860c4f7d85c33eb5cde4179Elliott Hughes
481d18e9cc0ab8b2f6d860c4f7d85c33eb5cde4179Elliott HughesTEST(sys_vfs, fstatfs) {
491d18e9cc0ab8b2f6d860c4f7d85c33eb5cde4179Elliott Hughes  struct statfs sb;
501d18e9cc0ab8b2f6d860c4f7d85c33eb5cde4179Elliott Hughes  int fd = open("/proc", O_RDONLY);
511d18e9cc0ab8b2f6d860c4f7d85c33eb5cde4179Elliott Hughes  ASSERT_EQ(0, fstatfs(fd, &sb));
521d18e9cc0ab8b2f6d860c4f7d85c33eb5cde4179Elliott Hughes  close(fd);
531d18e9cc0ab8b2f6d860c4f7d85c33eb5cde4179Elliott Hughes  Check(sb);
541d18e9cc0ab8b2f6d860c4f7d85c33eb5cde4179Elliott Hughes}
551d18e9cc0ab8b2f6d860c4f7d85c33eb5cde4179Elliott HughesTEST(sys_vfs, fstatfs64) {
561d18e9cc0ab8b2f6d860c4f7d85c33eb5cde4179Elliott Hughes  struct statfs64 sb;
571d18e9cc0ab8b2f6d860c4f7d85c33eb5cde4179Elliott Hughes  int fd = open("/proc", O_RDONLY);
581d18e9cc0ab8b2f6d860c4f7d85c33eb5cde4179Elliott Hughes  ASSERT_EQ(0, fstatfs64(fd, &sb));
591d18e9cc0ab8b2f6d860c4f7d85c33eb5cde4179Elliott Hughes  close(fd);
601d18e9cc0ab8b2f6d860c4f7d85c33eb5cde4179Elliott Hughes  Check(sb);
611d18e9cc0ab8b2f6d860c4f7d85c33eb5cde4179Elliott Hughes}
62