Skip to content

Commit

Permalink
Introduce WinPacketClone with unit tests
Browse files Browse the repository at this point in the history
- Divide win_packet.c into two files
    - win_packet.c - for NDIS-independent logic
    - win_packet_raw.c - only NDIS-dependent code
- Extend WIN_PACKET interface to allow cloning and establishing
  parent/child relationships
- Implement WinPacketClone unit tests

Change-Id: I468772725236a1f7bc69f1a7cddaefe21b486790
Depends-On: I1ff3d749b6d94747c89e9a520e56a59daa4c7b6f
Partial-Bug: #1737177
  • Loading branch information
Dariusz Sosnowski authored and jablonskim committed Jun 29, 2018
1 parent de1ebe1 commit 0625ce3
Show file tree
Hide file tree
Showing 25 changed files with 345 additions and 632 deletions.
7 changes: 0 additions & 7 deletions dp-core/SConscript
Expand Up @@ -7,13 +7,6 @@ import platform
Import('VRouterEnv')
env = VRouterEnv.Clone()

if platform.system() == 'Windows':
env.Append(CPPDEFINES = '__KERNEL__')
env.Append(CPPPATH = [env['TOP_INCLUDE'], '../test/windows/kernel_impl/include'])

# Treat warnings as errors
env.Append(CPPFLAGS = '/WX')

env.Library('dp_core', Glob('*.c'))

if 'install' in COMMAND_LINE_TARGETS:
Expand Down
19 changes: 8 additions & 11 deletions test/windows/SConscript
Expand Up @@ -5,26 +5,23 @@
Import('VRouterEnv')
env = VRouterEnv.Clone()

env.Append(CPPPATH = [env['TOP_INCLUDE'], 'kernel_impl/include'])
env.Append(CPPDEFINES = '__KERNEL__')
env.Append(CPPPATH = [env['TOP_INCLUDE'], 'include'])

# Treat warnings as errors
env.Append(CPPFLAGS = '/WX')

env.Replace(LIBPATH = env['TOP_LIB'])
env.Append(LIBPATH = ['.', '../../windows', '../../dp-core', '../../sandesh'])

vrouter_stubs = env.Object('vrouter_stubs.c')
env.StaticLibrary('kernel_stubs', ['kernel_impl/src/wdm.c', 'kernel_impl/src/ndis.c'])
env.Append(LIBPATH = ['.', '../../windows'])

# vRouter code
env.Replace(LIBS = ['windows_vrouter', 'dp_core', 'dp_sandesh_c', 'kernel_stubs'])
env.Replace(LIBS = ['win_packet'])
# 3rd party libs
env.Append(LIBS = 'cmocka')
# OS libs
env.Append(LIBS = ['ws2_32.lib', 'ntdll.lib'])

env.AppendENVPath('Path', Dir('#build/bin'))
example_test = env.UnitTest('example_test', ['test.c', 'fake_win_packet.c', vrouter_stubs])
kernel_tests = env.TestSuite('kernel-tests', [example_test])

win_packet_clone_tests_src = ['test_win_packet_clone.c', 'fake_win_packet_raw.c']
win_packet_clone_tests = env.UnitTest('win_packet_clone_tests', win_packet_clone_tests_src)

kernel_tests = env.TestSuite('kernel-tests', [win_packet_clone_tests])
env.Requires(kernel_tests, '#build/bin/cmocka.dll')
18 changes: 0 additions & 18 deletions test/windows/fake_win_packet.c

This file was deleted.

62 changes: 62 additions & 0 deletions test/windows/fake_win_packet_raw.c
@@ -0,0 +1,62 @@
/*
* fake_win_packet_raw.c
*
* Copyright (c) 2018 Juniper Networks, Inc. All rights reserved.
*/
#include "fake_win_packet.h"

#include <assert.h>
#include <stdlib.h>
#include <setjmp.h>
#include <cmocka.h>

struct _WIN_PACKET {
PWIN_PACKET Parent;
LONG ChildRefCount;
};

PWIN_PACKET
Fake_WinPacketAllocate()
{
PWIN_PACKET packet = test_malloc(sizeof(*packet));
assert(packet != NULL);
memset(packet, 0, sizeof(*packet));
return packet;
}

VOID
Fake_WinPacketFree(PWIN_PACKET Packet)
{
test_free(Packet);
}

PWIN_PACKET
WinPacketRawGetParentOf(PWIN_PACKET Packet)
{
return Packet->Parent;
}

VOID
WinPacketRawSetParentOf(PWIN_PACKET Packet, PWIN_PACKET Parent)
{
Packet->Parent = Parent;
}

LONG
WinPacketRawGetChildCountOf(PWIN_PACKET Packet)
{
return Packet->ChildRefCount;
}

VOID
WinPacketRawIncrementChildCountOf(PWIN_PACKET Packet)
{
Packet->ChildRefCount++;
}

static PWIN_PACKET
WinPacketRawAllocateClone_Impl(PWIN_PACKET Packet)
{
return NULL;
}
PWIN_PACKET (*WinPacketRawAllocateClone)(PWIN_PACKET Packet) = WinPacketRawAllocateClone_Impl;
14 changes: 14 additions & 0 deletions test/windows/include/fake_win_packet.h
@@ -0,0 +1,14 @@
/*
* fake_win_packet.h
*
* Copyright (c) 2018 Juniper Networks, Inc. All rights reserved.
*/
#ifndef _FAKE_WIN_PACKET_H_
#define _FAKE_WIN_PACKET_H_

#include "win_packet.h"

PWIN_PACKET Fake_WinPacketAllocate();
VOID Fake_WinPacketFree(PWIN_PACKET Packet);

#endif // _FAKE_WIN_PACKET_H_
9 changes: 9 additions & 0 deletions test/windows/include/ndis.h
@@ -0,0 +1,9 @@
/*
* Copyright (c) 2018 Juniper Networks, Inc. All rights reserved.
*/
#ifndef _FAKE_NDIS_H_
#define _FAKE_NDIS_H_

typedef struct _NET_BUFFER_LIST NET_BUFFER_LIST, *PNET_BUFFER_LIST;

#endif // _FAKE_NDIS_H_

0 comments on commit 0625ce3

Please sign in to comment.