1f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)// Copyright 2014 The Chromium Authors. All rights reserved.
2f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)// Use of this source code is governed by a BSD-style license that can be
3f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)// found in the LICENSE file.
4f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)
5f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)#include "crazy_linker_ashmem.h"
6f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)
7f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)#include <sys/mman.h>
8f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)
9f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)#include <minitest/minitest.h>
10f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)
11f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)namespace crazy {
12f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)
13f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)TEST(AshmemRegion, Construction) {
14f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)  AshmemRegion region;
15f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)  EXPECT_EQ(-1, region.fd());
16f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)}
17f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)
18f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)TEST(AshmemRegion, Allocate) {
19f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)  AshmemRegion region;
20f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)  const size_t kSize = 4096 * 10;
21f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)  EXPECT_TRUE(region.Allocate(kSize, __FUNCTION__));
22f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)  void* map = ::mmap(NULL,
23f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)                     kSize,
24f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)                     PROT_READ | PROT_WRITE,
25f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)                     MAP_ANONYMOUS | MAP_SHARED,
26f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)                     region.fd(),
27f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)                     0);
28f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)  EXPECT_NE(MAP_FAILED, map);
29f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)
30f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)  for (size_t n = 0; n < kSize; ++n) {
31f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)    TEST_TEXT << "Checking region[" << n << "]";
32f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)    EXPECT_EQ(0, ((char*)map)[n]);
33f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)  }
34f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)
35f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)  EXPECT_EQ(0, ::munmap(map, kSize));
36f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)}
37f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)
38f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)}  // namespace crazy
39