// Copyright 2014 The Chromium Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.

#ifndef SANDBOX_LINUX_SECCOMP_BPF_BPF_TESTER_COMPATIBILITY_DELEGATE_H_
#define SANDBOX_LINUX_SECCOMP_BPF_BPF_TESTER_COMPATIBILITY_DELEGATE_H_

#include "base/memory/scoped_ptr.h"
#include "sandbox/linux/seccomp-bpf/sandbox_bpf_test_runner.h"

namespace sandbox {

// This templated class allows building a BPFTesterDelegate from a
// deprecated-style BPF policy (that is a SyscallEvaluator function pointer,
// instead of a SandboxBPFPolicy class), specified in |policy_function| and a
// function pointer to a test in |test_function|.
// This allows both the policy and the test function to take a pointer to an
// object of type "Aux" as a parameter. This is used to implement the BPF_TEST
// macro and should generally not be used directly.
template <class Policy, class Aux>
class BPFTesterCompatibilityDelegate : public BPFTesterDelegate {
 public:
  typedef void (*TestFunction)(Aux*);

  explicit BPFTesterCompatibilityDelegate(TestFunction test_function)
      : aux_(), test_function_(test_function) {}

  ~BPFTesterCompatibilityDelegate() override {}

  scoped_ptr<bpf_dsl::Policy> GetSandboxBPFPolicy() override {
    // The current method is guaranteed to only run in the child process
    // running the test. In this process, the current object is guaranteed
    // to live forever. So it's ok to pass aux_pointer_for_policy_ to
    // the policy, which could in turn pass it to the kernel via Trap().
    return scoped_ptr<bpf_dsl::Policy>(new Policy(&aux_));
  }

  void RunTestFunction() override {
    // Run the actual test.
    // The current object is guaranteed to live forever in the child process
    // where this will run.
    test_function_(&aux_);
  }

 private:
  Aux aux_;
  TestFunction test_function_;

  DISALLOW_COPY_AND_ASSIGN(BPFTesterCompatibilityDelegate);
};

}  // namespace sandbox

#endif  // SANDBOX_LINUX_SECCOMP_BPF_BPF_TESTER_COMPATIBILITY_DELEGATE_H_
