Clean up TODOs

PiperOrigin-RevId: 305592245
This commit is contained in:
Fabricio Voznika 2020-04-08 17:56:55 -07:00 committed by gVisor bot
parent 981a587476
commit 6dd5a1f3fe
13 changed files with 19 additions and 40 deletions

View File

@ -44,9 +44,6 @@ const (
// lookup. // lookup.
cacheRevalidate = "revalidate" cacheRevalidate = "revalidate"
// TODO(edahlgren/mpratt): support a tmpfs size limit.
// size = "size"
// Permissions that exceed modeMask will be rejected. // Permissions that exceed modeMask will be rejected.
modeMask = 01777 modeMask = 01777

View File

@ -682,7 +682,7 @@ func (fs *Filesystem) StatFSAt(ctx context.Context, rp *vfs.ResolvingPath) (linu
if err != nil { if err != nil {
return linux.Statfs{}, err return linux.Statfs{}, err
} }
// TODO: actually implement statfs // TODO(gvisor.dev/issue/1193): actually implement statfs.
return linux.Statfs{}, syserror.ENOSYS return linux.Statfs{}, syserror.ENOSYS
} }

View File

@ -184,7 +184,6 @@ func (t *Task) CanTrace(target *Task, attach bool) bool {
if targetCreds.PermittedCaps&^callerCreds.PermittedCaps != 0 { if targetCreds.PermittedCaps&^callerCreds.PermittedCaps != 0 {
return false return false
} }
// TODO: Yama LSM
return true return true
} }

View File

@ -497,7 +497,7 @@ type FilesystemImpl interface {
// Preconditions: vd.Mount().Filesystem().Impl() == this FilesystemImpl. // Preconditions: vd.Mount().Filesystem().Impl() == this FilesystemImpl.
PrependPath(ctx context.Context, vfsroot, vd VirtualDentry, b *fspath.Builder) error PrependPath(ctx context.Context, vfsroot, vd VirtualDentry, b *fspath.Builder) error
// TODO: inotify_add_watch() // TODO(gvisor.dev/issue/1479): inotify_add_watch()
} }
// PrependPathAtVFSRootError is returned by implementations of // PrependPathAtVFSRootError is returned by implementations of

View File

@ -233,9 +233,9 @@ func (vfs *VirtualFilesystem) MountAt(ctx context.Context, creds *auth.Credentia
} }
vd.dentry.mu.Lock() vd.dentry.mu.Lock()
} }
// TODO: Linux requires that either both the mount point and the mount root // TODO(gvisor.dev/issue/1035): Linux requires that either both the mount
// are directories, or neither are, and returns ENOTDIR if this is not the // point and the mount root are directories, or neither are, and returns
// case. // ENOTDIR if this is not the case.
mntns := vd.mount.ns mntns := vd.mount.ns
mnt := newMount(vfs, fs, root, mntns, opts) mnt := newMount(vfs, fs, root, mntns, opts)
vfs.mounts.seq.BeginWrite() vfs.mounts.seq.BeginWrite()
@ -274,9 +274,9 @@ func (vfs *VirtualFilesystem) UmountAt(ctx context.Context, creds *auth.Credenti
} }
} }
// TODO(jamieliu): Linux special-cases umount of the caller's root, which // TODO(gvisor.dev/issue/1035): Linux special-cases umount of the caller's
// we don't implement yet (we'll just fail it since the caller holds a // root, which we don't implement yet (we'll just fail it since the caller
// reference on it). // holds a reference on it).
vfs.mounts.seq.BeginWrite() vfs.mounts.seq.BeginWrite()
if opts.Flags&linux.MNT_DETACH == 0 { if opts.Flags&linux.MNT_DETACH == 0 {

View File

@ -55,7 +55,7 @@ func TestMountTableInsertLookup(t *testing.T) {
} }
} }
// TODO: concurrent lookup/insertion/removal // TODO(gvisor.dev/issue/1035): concurrent lookup/insertion/removal.
// must be powers of 2 // must be powers of 2
var benchNumMounts = []int{1 << 2, 1 << 5, 1 << 8} var benchNumMounts = []int{1 << 2, 1 << 5, 1 << 8}

View File

@ -272,9 +272,8 @@ func setupRootFS(spec *specs.Spec, conf *boot.Config) error {
root := spec.Root.Path root := spec.Root.Path
if !conf.TestOnlyAllowRunAsCurrentUserWithoutChroot { if !conf.TestOnlyAllowRunAsCurrentUserWithoutChroot {
// FIXME: runsc can't be re-executed without // runsc can't be re-executed without /proc, so we create a tmpfs mount,
// /proc, so we create a tmpfs mount, mount ./proc and ./root // mount ./proc and ./root there, then move this mount to the root and after
// there, then move this mount to the root and after
// setCapsAndCallSelf, runsc will chroot into /root. // setCapsAndCallSelf, runsc will chroot into /root.
// //
// We need a directory to construct a new root and we know that // We need a directory to construct a new root and we know that

View File

@ -56,10 +56,6 @@ TEST(EpollTest, AllWritable) {
struct epoll_event result[kFDsPerEpoll]; struct epoll_event result[kFDsPerEpoll];
ASSERT_THAT(RetryEINTR(epoll_wait)(epollfd.get(), result, kFDsPerEpoll, -1), ASSERT_THAT(RetryEINTR(epoll_wait)(epollfd.get(), result, kFDsPerEpoll, -1),
SyscallSucceedsWithValue(kFDsPerEpoll)); SyscallSucceedsWithValue(kFDsPerEpoll));
// TODO(edahlgren): Why do some tests check epoll_event::data, and others
// don't? Does Linux actually guarantee that, in any of these test cases,
// epoll_wait will necessarily write out the epoll_events in the order that
// they were registered?
for (int i = 0; i < kFDsPerEpoll; i++) { for (int i = 0; i < kFDsPerEpoll; i++) {
ASSERT_EQ(result[i].events, EPOLLOUT); ASSERT_EQ(result[i].events, EPOLLOUT);
} }

View File

@ -87,6 +87,7 @@ class FileTest : public ::testing::Test {
ClosePipes(); ClosePipes();
} }
protected:
std::string test_file_name_; std::string test_file_name_;
FileDescriptor test_file_fd_; FileDescriptor test_file_fd_;

View File

@ -27,14 +27,7 @@ namespace testing {
namespace { namespace {
// This test is currently very rudimentary. // TODO(gvisor.dev/issue/2370): This test is currently very rudimentary.
//
// TODO(edahlgren):
// * bad buffer states (EFAULT).
// * bad fds (wrong permission, wrong type of file, EBADF).
// * check offset is not incremented.
// * check for EOF.
// * writing to pipes, symlinks, special files.
class Pwrite64 : public ::testing::Test { class Pwrite64 : public ::testing::Test {
void SetUp() override { void SetUp() override {
name_ = NewTempAbsPath(); name_ = NewTempAbsPath();

View File

@ -242,7 +242,7 @@ TEST_F(TuntapTest, InvalidReadWrite) {
TEST_F(TuntapTest, WriteToDownDevice) { TEST_F(TuntapTest, WriteToDownDevice) {
SKIP_IF(!ASSERT_NO_ERRNO_AND_VALUE(HaveCapability(CAP_NET_ADMIN))); SKIP_IF(!ASSERT_NO_ERRNO_AND_VALUE(HaveCapability(CAP_NET_ADMIN)));
// FIXME: gVisor always creates enabled/up'd interfaces. // FIXME(b/110961832): gVisor always creates enabled/up'd interfaces.
SKIP_IF(IsRunningOnGvisor()); SKIP_IF(IsRunningOnGvisor());
FileDescriptor fd = ASSERT_NO_ERRNO_AND_VALUE(Open(kDevNetTun, O_RDWR)); FileDescriptor fd = ASSERT_NO_ERRNO_AND_VALUE(Open(kDevNetTun, O_RDWR));
@ -280,10 +280,11 @@ PosixErrorOr<FileDescriptor> OpenAndAttachTap(
&addr, sizeof(addr))); &addr, sizeof(addr)));
if (!IsRunningOnGvisor()) { if (!IsRunningOnGvisor()) {
// FIXME: gVisor doesn't support setting MAC address on interfaces yet. // FIXME(b/110961832): gVisor doesn't support setting MAC address on
// interfaces yet.
RETURN_IF_ERRNO(LinkSetMacAddr(link->index, kMacA, sizeof(kMacA))); RETURN_IF_ERRNO(LinkSetMacAddr(link->index, kMacA, sizeof(kMacA)));
// FIXME: gVisor always creates enabled/up'd interfaces. // FIXME(b/110961832): gVisor always creates enabled/up'd interfaces.
RETURN_IF_ERRNO(LinkChangeFlags(link->index, IFF_UP, IFF_UP)); RETURN_IF_ERRNO(LinkChangeFlags(link->index, IFF_UP, IFF_UP));
} }

View File

@ -31,14 +31,8 @@ namespace gvisor {
namespace testing { namespace testing {
namespace { namespace {
// This test is currently very rudimentary.
// // TODO(gvisor.dev/issue/2370): This test is currently very rudimentary.
// TODO(edahlgren):
// * bad buffer states (EFAULT).
// * bad fds (wrong permission, wrong type of file, EBADF).
// * check offset is incremented.
// * check for EOF.
// * writing to pipes, symlinks, special files.
class WriteTest : public ::testing::Test { class WriteTest : public ::testing::Test {
public: public:
ssize_t WriteBytes(int fd, int bytes) { ssize_t WriteBytes(int fd, int bytes) {

View File

@ -105,7 +105,6 @@ def _go_template_instance_impl(ctx):
executable = ctx.executable._tool, executable = ctx.executable._tool,
) )
# TODO: How can we get the dependencies out?
return struct( return struct(
files = depset([output]), files = depset([output]),
) )