// Copyright (c) 2015 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.

#include "net/cert/mock_client_cert_verifier.h"

#include "net/base/net_errors.h"
#include "net/cert/x509_certificate.h"

namespace net {

struct MockClientCertVerifier::Rule {
  Rule(X509Certificate* cert, int rv) : cert(cert), rv(rv) { DCHECK(cert); }

  scoped_refptr<X509Certificate> cert;
  int rv;
};

MockClientCertVerifier::MockClientCertVerifier()
    : default_result_(ERR_CERT_INVALID) {}

MockClientCertVerifier::~MockClientCertVerifier() {}

int MockClientCertVerifier::Verify(X509Certificate* cert,
                                   const CompletionCallback& callback,
                                   scoped_ptr<Request>* out_req) {
  for (const Rule& rule : rules_) {
    // Check just the server cert. Intermediates will be ignored.
    if (rule.cert->Equals(cert))
      return rule.rv;
  }
  return default_result_;
}

void MockClientCertVerifier::AddResultForCert(X509Certificate* cert, int rv) {
  Rule rule(cert, rv);
  rules_.push_back(rule);
}

}  // namespace net
