1 /*
2 * PROJECT: ReactOS kernel-mode tests
3 * LICENSE: LGPLv2+ - See COPYING.LIB in the top level directory
4 * PURPOSE: Kernel-Mode Test Suite Io Regressions KM-Test (Irp)
5 * PROGRAMMER: Aleksey Bragin <aleksey@reactos.org>
6 */
7 /* Based on code Copyright 2008 Etersoft (Alexander Morozov) */
8
9 #include <kmt_test.h>
10
11 #define NDEBUG
12 #include <debug.h>
13
START_TEST(IoIrp)14 START_TEST(IoIrp)
15 {
16 USHORT size;
17 IRP *iorp;
18
19 // 1st test
20 size = sizeof(IRP) + 5 * sizeof(IO_STACK_LOCATION);
21 iorp = ExAllocatePool(NonPagedPool, size);
22
23 if (NULL != iorp)
24 {
25 IoInitializeIrp(iorp, size, 5);
26
27 ok(6 == iorp->Type, "Irp type should be 6, but got %d\n", iorp->Type);
28 ok(iorp->Size == size, "Irp size should be %d, but got %d\n",
29 iorp->Size, size);
30 ok(5 == iorp->StackCount, "Irp StackCount should be 5, but got %d\n",
31 iorp->StackCount);
32 ok(6 == iorp->CurrentLocation, "Irp CurrentLocation should be 6, but got %d\n",
33 iorp->CurrentLocation);
34 ok(IsListEmpty(&iorp->ThreadListEntry), "IRP thread list is not empty\n");
35 ok ((PIO_STACK_LOCATION)(iorp + 1) + 5 ==
36 iorp->Tail.Overlay.CurrentStackLocation,
37 "CurrentStackLocation mismatch\n");
38
39 ExFreePool(iorp);
40 }
41
42 // 2nd test
43 size = sizeof(IRP) + 2 * sizeof(IO_STACK_LOCATION);
44 iorp = IoAllocateIrp(2, FALSE);
45
46 if (NULL != iorp)
47 {
48 ok(6 == iorp->Type, "Irp type should be 6, but got %d\n", iorp->Type);
49 ok(iorp->Size >= size,
50 "Irp size should be more or equal to %d, but got %d\n",
51 iorp->Size, size);
52 ok(2 == iorp->StackCount, "Irp StackCount should be 2, but got %d\n",
53 iorp->StackCount);
54 ok(3 == iorp->CurrentLocation, "Irp CurrentLocation should be 3, but got %d\n",
55 iorp->CurrentLocation);
56 ok(IsListEmpty(&iorp->ThreadListEntry), "IRP thread list is not empty\n");
57 ok ((PIO_STACK_LOCATION)(iorp + 1) + 2 ==
58 iorp->Tail.Overlay.CurrentStackLocation,
59 "CurrentStackLocation mismatch\n");
60 ok((IRP_ALLOCATED_FIXED_SIZE & iorp->AllocationFlags),
61 "IRP Allocation flags lack fixed size attribute\n");
62 ok(!(IRP_LOOKASIDE_ALLOCATION & iorp->AllocationFlags),
63 "IRP Allocation flags should not have lookaside allocation\n");
64
65 IoFreeIrp(iorp);
66 }
67
68 // 3rd test
69 size = sizeof(IRP) + 2 * sizeof(IO_STACK_LOCATION);
70 iorp = IoAllocateIrp(2, TRUE);
71
72 if (NULL != iorp)
73 {
74 ok(6 == iorp->Type, "Irp type should be 6, but got %d\n", iorp->Type);
75 ok(iorp->Size >= size,
76 "Irp size should be more or equal to %d, but got %d\n",
77 iorp->Size, size);
78 ok(2 == iorp->StackCount, "Irp StackCount should be 2, but got %d\n",
79 iorp->StackCount);
80 ok(3 == iorp->CurrentLocation, "Irp CurrentLocation should be 3, but got %d\n",
81 iorp->CurrentLocation);
82 ok(IsListEmpty(&iorp->ThreadListEntry), "IRP thread list is not empty\n");
83 ok ((PIO_STACK_LOCATION)(iorp + 1) + 2 ==
84 iorp->Tail.Overlay.CurrentStackLocation,
85 "CurrentStackLocation mismatch\n");
86 ok((IRP_ALLOCATED_FIXED_SIZE & iorp->AllocationFlags),
87 "IRP Allocation flags lack fixed size attribute\n");
88 ok((IRP_LOOKASIDE_ALLOCATION & iorp->AllocationFlags),
89 "IRP Allocation flags lack lookaside allocation\n");
90
91 IoFreeIrp(iorp);
92 }
93 }
94