/*
 * Copyright (C) 2016 The Android Open Source Project
 *
 * Licensed under the Apache License, Version 2.0 (the "License");
 * you may not use this file except in compliance with the License.
 * You may obtain a copy of the License at
 *
 *      http://www.apache.org/licenses/LICENSE-2.0
 *
 * Unless required by applicable law or agreed to in writing, software
 * distributed under the License is distributed on an "AS IS" BASIS,
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 * See the License for the specific language governing permissions and
 * limitations under the License.
 */

#ifndef TESTS_MOCK_COMMAND_PROCESSOR_H_
#define TESTS_MOCK_COMMAND_PROCESSOR_H_

#include "android-base/macros.h"
#include "gmock/gmock.h"

#include "wifilogd/command_processor.h"

namespace android {
namespace wifilogd {

class MockCommandProcessor : public CommandProcessor {
 public:
  MockCommandProcessor();
  virtual ~MockCommandProcessor();

  MOCK_METHOD3(ProcessCommand,
               bool(const void* input_buf, size_t n_bytes_read, int fd));

 private:
  DISALLOW_COPY_AND_ASSIGN(MockCommandProcessor);
};

}  // namespace wifilogd
}  // namespace android

#endif  // TESTS_MOCK_COMMAND_PROCESSOR_H_
