Add 'toString' method into IdleStateEvent (#9695)

### Motivation:

IdleStateEvent is very convenient and frequently used type of events. However both in runtime (logs) and in debug you need some manual steps to see their actual content. Default implementation generates worthless trash like this:

    io.netty.handler.timeout.IdleStateEvent@27f674d

There are examples already, where event has convenient and useful toString implementation:

* io.netty.handler.proxy.ProxyConnectionEvent
* io.netty.handler.ssl.SslCompletionEvent

### Modification:

* Implement 'IdleStateEvent.toString' method.
* Unit test.

### Result:

More useful String representation of IdleStateEvent
This commit is contained in:
ursa 2019-10-23 09:28:18 +01:00 committed by Norman Maurer
parent 8674ccfcd2
commit a77fe9333d
2 changed files with 44 additions and 0 deletions

View File

@ -17,6 +17,7 @@ package io.netty.handler.timeout;
import io.netty.channel.Channel;
import io.netty.util.internal.ObjectUtil;
import io.netty.util.internal.StringUtil;
/**
* A user event triggered by {@link IdleStateHandler} when a {@link Channel} is idle.
@ -31,6 +32,7 @@ public class IdleStateEvent {
private final IdleState state;
private final boolean first;
private String strVal;
/**
* Constructor for sub-classes.
@ -56,4 +58,12 @@ public class IdleStateEvent {
public boolean isFirst() {
return first;
}
@Override
public String toString() {
if (strVal == null) {
strVal = StringUtil.simpleClassName(this) + "(" + state + (first ? ", first" : "") + ')';
}
return strVal;
}
}

View File

@ -0,0 +1,34 @@
/*
* Copyright 2019 The Netty Project
*
* The Netty Project licenses this file to you 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 io.netty.handler.timeout;
import org.junit.Test;
import static io.netty.handler.timeout.IdleStateEvent.*;
import static org.hamcrest.Matchers.hasToString;
import static org.junit.Assert.*;
public class IdleStateEventTest {
@Test
public void testHumanReadableToString() {
assertThat(FIRST_READER_IDLE_STATE_EVENT, hasToString("IdleStateEvent(READER_IDLE, first)"));
assertThat(READER_IDLE_STATE_EVENT, hasToString("IdleStateEvent(READER_IDLE)"));
assertThat(FIRST_WRITER_IDLE_STATE_EVENT, hasToString("IdleStateEvent(WRITER_IDLE, first)"));
assertThat(WRITER_IDLE_STATE_EVENT, hasToString("IdleStateEvent(WRITER_IDLE)"));
assertThat(FIRST_ALL_IDLE_STATE_EVENT, hasToString("IdleStateEvent(ALL_IDLE, first)"));
assertThat(ALL_IDLE_STATE_EVENT, hasToString("IdleStateEvent(ALL_IDLE)"));
}
}