You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@maven.apache.org by st...@apache.org on 2017/01/09 09:18:44 UTC
[08/15] maven-resolver git commit: Bug 449599 - Return value of
DefaultSessionData.set(key, null, null) disobeys API doc
Bug 449599 - Return value of DefaultSessionData.set(key, null, null) disobeys API doc
Fixed set(key, null, null) to return true if current mapping is null/non-existing
Project: http://git-wip-us.apache.org/repos/asf/maven-resolver/repo
Commit: http://git-wip-us.apache.org/repos/asf/maven-resolver/commit/d171401c
Tree: http://git-wip-us.apache.org/repos/asf/maven-resolver/tree/d171401c
Diff: http://git-wip-us.apache.org/repos/asf/maven-resolver/diff/d171401c
Branch: refs/heads/master
Commit: d171401cf3e24a715006f566774cd48e7932e91c
Parents: 7a07539
Author: Benjamin Bentmann <be...@sonatype.com>
Authored: Tue Nov 11 15:08:39 2014 +0100
Committer: Benjamin Bentmann <be...@sonatype.com>
Committed: Tue Nov 11 15:08:39 2014 +0100
----------------------------------------------------------------------
.../org/eclipse/aether/DefaultSessionData.java | 6 +-
.../eclipse/aether/DefaultSessionDataTest.java | 128 +++++++++++++++++++
2 files changed, 133 insertions(+), 1 deletion(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/maven-resolver/blob/d171401c/aether-api/src/main/java/org/eclipse/aether/DefaultSessionData.java
----------------------------------------------------------------------
diff --git a/aether-api/src/main/java/org/eclipse/aether/DefaultSessionData.java b/aether-api/src/main/java/org/eclipse/aether/DefaultSessionData.java
index 90f1127..738cebc 100644
--- a/aether-api/src/main/java/org/eclipse/aether/DefaultSessionData.java
+++ b/aether-api/src/main/java/org/eclipse/aether/DefaultSessionData.java
@@ -1,5 +1,5 @@
/*******************************************************************************
- * Copyright (c) 2010, 2012 Sonatype, Inc.
+ * Copyright (c) 2010, 2014 Sonatype, Inc.
* All rights reserved. This program and the accompanying materials
* are made available under the terms of the Eclipse Public License v1.0
* which accompanies this distribution, and is available at
@@ -61,6 +61,10 @@ public final class DefaultSessionData
}
else
{
+ if ( oldValue == null )
+ {
+ return !data.containsKey( key );
+ }
return data.remove( key, oldValue );
}
}
http://git-wip-us.apache.org/repos/asf/maven-resolver/blob/d171401c/aether-api/src/test/java/org/eclipse/aether/DefaultSessionDataTest.java
----------------------------------------------------------------------
diff --git a/aether-api/src/test/java/org/eclipse/aether/DefaultSessionDataTest.java b/aether-api/src/test/java/org/eclipse/aether/DefaultSessionDataTest.java
new file mode 100644
index 0000000..2c239a4
--- /dev/null
+++ b/aether-api/src/test/java/org/eclipse/aether/DefaultSessionDataTest.java
@@ -0,0 +1,128 @@
+/*******************************************************************************
+ * Copyright (c) 2014 Sonatype, Inc.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ * Sonatype, Inc. - initial API and implementation
+ *******************************************************************************/
+package org.eclipse.aether;
+
+import static org.junit.Assert.*;
+
+import java.util.UUID;
+import java.util.concurrent.atomic.AtomicReference;
+
+import org.junit.Test;
+
+public class DefaultSessionDataTest
+{
+
+ private DefaultSessionData data = new DefaultSessionData();
+
+ private Object get( Object key )
+ {
+ return data.get( key );
+ }
+
+ private void set( Object key, Object value )
+ {
+ data.set( key, value );
+ }
+
+ private boolean set( Object key, Object oldValue, Object newValue )
+ {
+ return data.set( key, oldValue, newValue );
+ }
+
+ @Test( expected = RuntimeException.class )
+ public void testGet_NullKey()
+ {
+ get( null );
+ }
+
+ @Test( expected = RuntimeException.class )
+ public void testSet_NullKey()
+ {
+ set( null, "data" );
+ }
+
+ @Test
+ public void testGetSet()
+ {
+ Object key = "key";
+ assertNull( get( key ) );
+ set( key, "value" );
+ assertEquals( "value", get( key ) );
+ set( key, "changed" );
+ assertEquals( "changed", get( key ) );
+ set( key, null );
+ assertNull( get( key ) );
+ }
+
+ @Test
+ public void testGetSafeSet()
+ {
+ Object key = "key";
+ assertNull( get( key ) );
+ assertFalse( set( key, "wrong", "value" ) );
+ assertNull( get( key ) );
+ assertTrue( set( key, null, "value" ) );
+ assertEquals( "value", get( key ) );
+ assertTrue( set( key, "value", "value" ) );
+ assertEquals( "value", get( key ) );
+ assertFalse( set( key, "wrong", "changed" ) );
+ assertEquals( "value", get( key ) );
+ assertTrue( set( key, "value", "changed" ) );
+ assertEquals( "changed", get( key ) );
+ assertFalse( set( key, "wrong", null ) );
+ assertEquals( "changed", get( key ) );
+ assertTrue( set( key, "changed", null ) );
+ assertNull( get( key ) );
+ assertTrue( set( key, null, null ) );
+ assertNull( get( key ) );
+ }
+
+ @Test( timeout = 10000 )
+ public void testConcurrency()
+ throws Exception
+ {
+ final AtomicReference<Throwable> error = new AtomicReference<Throwable>();
+ Thread threads[] = new Thread[20];
+ for ( int i = 0; i < threads.length; i++ )
+ {
+ threads[i] = new Thread()
+ {
+ @Override
+ public void run()
+ {
+ for ( int i = 0; i < 100; i++ )
+ {
+ String key = UUID.randomUUID().toString();
+ try
+ {
+ set( key, Boolean.TRUE );
+ assertEquals( Boolean.TRUE, get( key ) );
+ }
+ catch ( Throwable t )
+ {
+ error.compareAndSet( null, t );
+ t.printStackTrace();
+ }
+ }
+ }
+ };
+ }
+ for ( Thread thread : threads )
+ {
+ thread.start();
+ }
+ for ( Thread thread : threads )
+ {
+ thread.join();
+ }
+ assertNull( String.valueOf( error.get() ), error.get() );
+ }
+}