From 78de722aa0c7ae80c743e38a5bfaab36dd41c21e Mon Sep 17 00:00:00 2001 From: Dave Borowitz Date: Fri, 22 Mar 2019 08:02:18 -0700 Subject: [PATCH] Add CacheStatsSubject Change-Id: I07efea268113b73357b3f761ad47d7effe990fd9 --- java/com/google/gerrit/truth/BUILD | 1 + .../gerrit/truth/CacheStatsSubject.java | 62 +++++++++++++++++++ 2 files changed, 63 insertions(+) create mode 100644 java/com/google/gerrit/truth/CacheStatsSubject.java diff --git a/java/com/google/gerrit/truth/BUILD b/java/com/google/gerrit/truth/BUILD index 786ae0d86a..6f958b12ca 100644 --- a/java/com/google/gerrit/truth/BUILD +++ b/java/com/google/gerrit/truth/BUILD @@ -4,6 +4,7 @@ java_library( srcs = glob(["**/*.java"]), visibility = ["//visibility:public"], deps = [ + "//java/com/google/gerrit/common:annotations", "//lib:guava", "//lib/truth", ], diff --git a/java/com/google/gerrit/truth/CacheStatsSubject.java b/java/com/google/gerrit/truth/CacheStatsSubject.java new file mode 100644 index 0000000000..f1a9393a50 --- /dev/null +++ b/java/com/google/gerrit/truth/CacheStatsSubject.java @@ -0,0 +1,62 @@ +// Copyright (C) 2019 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. + +package com.google.gerrit.truth; + +import static com.google.common.truth.Truth.assertAbout; +import static java.util.Objects.requireNonNull; + +import com.google.common.cache.CacheStats; +import com.google.common.truth.FailureMetadata; +import com.google.common.truth.Subject; +import com.google.gerrit.common.UsedAt; +import com.google.gerrit.common.UsedAt.Project; + +@UsedAt(Project.PLUGINS_ALL) +public class CacheStatsSubject extends Subject { + public static CacheStatsSubject assertThat(CacheStats stats) { + return assertAbout(CacheStatsSubject::new).that(stats); + } + + public static CacheStats cloneStats(CacheStats other) { + return new CacheStats( + other.hitCount(), + other.missCount(), + other.loadSuccessCount(), + other.loadExceptionCount(), + other.totalLoadTime(), + other.evictionCount()); + } + + private CacheStats start = new CacheStats(0, 0, 0, 0, 0, 0); + + private CacheStatsSubject(FailureMetadata failureMetadata, CacheStats stats) { + super(failureMetadata, stats); + } + + public CacheStatsSubject since(CacheStats start) { + this.start = requireNonNull(start); + return this; + } + + public void hasHitCount(int expectedHitCount) { + isNotNull(); + check("hitCount()").that(actual().minus(start).hitCount()).isEqualTo(expectedHitCount); + } + + public void hasMissCount(int expectedMissCount) { + isNotNull(); + check("missCount()").that(actual().minus(start).missCount()).isEqualTo(expectedMissCount); + } +}