blob: 497fdaf3b0c1bc328d0a166f780ed00e888b6bd9 [file] [log] [blame]
// Copyright 2021 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 <limits.h>
#include <sys/stat.h>
#include <sys/statx.h>
#include <sys/types.h>
#include <unistd.h>
#include <fbl/unique_fd.h>
#include <zxtest/zxtest.h>
TEST(StatxTest, BadPathName) {
struct statx buf;
ASSERT_EQ(-1, statx(AT_FDCWD, 0, 0, STATX_BASIC_STATS, &buf));
ASSERT_EQ(EFAULT, errno);
}
TEST(StatxTest, BadBuffer) {
char pathname[] = "/tmp/statx_badbuffer_test.XXXXXX";
fbl::unique_fd src_file(mkstemp(pathname));
ASSERT_TRUE(src_file.is_valid());
close(src_file.get());
ASSERT_EQ(-1, statx(AT_FDCWD, pathname, 0, STATX_BASIC_STATS, 0));
ASSERT_EQ(EFAULT, errno);
}
TEST(StatxTest, BasicStatxCheck) {
char pathname[] = "/tmp/statx_basic_test.XXXXXX";
struct statx statx_buf;
struct stat stat_buf;
fbl::unique_fd src_file(mkstemp(pathname));
ASSERT_TRUE(src_file.is_valid());
close(src_file.get());
ASSERT_EQ(0, statx(AT_FDCWD, pathname, 0, STATX_BASIC_STATS, &statx_buf));
ASSERT_EQ(0, stat(pathname, &stat_buf));
// Compare results with stat
ASSERT_EQ(statx_buf.stx_ino, stat_buf.st_ino);
ASSERT_EQ(statx_buf.stx_nlink, stat_buf.st_nlink);
ASSERT_EQ(statx_buf.stx_size, stat_buf.st_size);
ASSERT_EQ(statx_buf.stx_mode, stat_buf.st_mode);
}
TEST(StatxTest, BasicStatxMaskCheck) {
char pathname[] = "/tmp/statx_basic_mask_test.XXXXXX";
struct statx statx_buf;
struct stat stat_buf;
fbl::unique_fd src_file(mkstemp(pathname));
ASSERT_TRUE(src_file.is_valid());
close(src_file.get());
ASSERT_EQ(0, statx(AT_FDCWD, pathname, 0, STATX_NLINK, &statx_buf));
ASSERT_EQ(0, stat(pathname, &stat_buf));
// Compare results with stat
ASSERT_EQ(statx_buf.stx_nlink, stat_buf.st_nlink);
// Check if correct mask was received.
ASSERT_EQ(statx_buf.stx_mask & STATX_NLINK, STATX_NLINK);
// Check if other values were not set.
ASSERT_NE(statx_buf.stx_ino, stat_buf.st_ino);
ASSERT_NE(statx_buf.stx_mode, stat_buf.st_mode);
}