// Copyright 2017 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 <gtest/gtest.h>

#include "src/virtualization/bin/vmm/phys_mem_fake.h"
#include "src/virtualization/bin/vmm/virtio_device.h"
#include "src/virtualization/bin/vmm/virtio_device_fake.h"
#include "src/virtualization/bin/vmm/virtio_queue_fake.h"

namespace {

TEST(VirtioQueueTest, HandleOverflow) {
  VirtioDeviceFake device;
  VirtioQueue* queue = device.queue();
  VirtioQueueFake* queue_fake = device.queue_fake();

  // Setup queue pointers so that the next descriptor will wrap avail->idx
  // to 0.
  VirtioRing* ring = queue_fake->ring();
  const_cast<uint16_t&>(ring->avail->idx) = UINT16_MAX;
  ring->index = UINT16_MAX;

  uint16_t expected_desc;
  uint32_t data = 0x12345678;
  ASSERT_EQ(queue_fake->BuildDescriptor().AppendReadable(&data, sizeof(data)).Build(&expected_desc),
            ZX_OK);

  uint16_t desc;
  ASSERT_EQ(queue->NextAvail(&desc), ZX_OK);
  ASSERT_EQ(desc, expected_desc);
  ASSERT_EQ(queue_fake->ring()->avail->idx, 0);
  ASSERT_EQ(queue_fake->ring()->index, 0);
}

}  // namespace
